also, how would you "cast" a BigInt from string to BigInt ? On Tue, Jul 17, 2018 at 11:49 AM Andrea Giammarchi < andrea.giammar...@gmail.com> wrote:
> fair enough, so everything that is not `object` or `null` should never use > `new`. Is this somehow an indirect rule based on current specs or actually > part of the specification? > > > > On Tue, Jul 17, 2018 at 11:12 AM J Decker <d3c...@gmail.com> wrote: > >> >> >> On Tue, Jul 17, 2018 at 1:48 AM Andrea Giammarchi < >> andrea.giammar...@gmail.com> wrote: >> >>> We miss a fundamental feature in JS, the ability to understand if a >>> native constructor can be used with `new` or not. >>> >>> BigInt("5555555555555555555555555500003"); >>> 5555555555555555555555555500003n >>> >>> new BigInt("5555555555555555555555555500003"); >>> VM51:1 Uncaught TypeError: BigInt is not a constructor >>> >>> >> ``` >> typeof(5n) >> "bigint" >> ``` >> >> Uint8Array([]) >>> VM54:1 Uncaught TypeError: Constructor Uint8Array requires 'new' >>> >>> new Uint8Array([]) >>> Uint8Array [] >>> >>> Without that knowledge, any attempt to even think about a solution that >>> would scale not only with BigInt but with everything else, is kinda futile. >>> >>> Best Regards. >>> >>> >>> >>> >>> >>> >>> On Sun, Jul 15, 2018 at 8:27 AM Anders Rundgren < >>> anders.rundgren....@gmail.com> wrote: >>> >>>> On 2018-07-15 08:17, J Decker wrote: >>>> <snip> >>>> > If you want to use BigInt with JSON you have to serialize it >>>> yourself: >>>> > >>>> > Yes; and I did forget to mentions erilaization side but the serlizer >>>> could do an additional type check and emit and appropriate thing. >>>> >>>> It is the "appropriate thing" that is problem; the rest is trivial. >>>> >>>> Anders >>>> >>>> > I thought the replacer could be used- but the output of replacer >>>> would have to type check to see if it's a bigint too.... >>>> > https://github.com/v8/v8/blob/master/src/json-stringifier.cc#L305 >>>> case BIGINT_TYPE: hmm and digging some more there's lots of eexcpetions >>>> thrown... >>>> > >>>> > does Number( "5n" ) ? result in a bigint? No.... >>>> > ``` >>>> > Number( "5n" ) >>>> > NaN >>>> > var a = 5n >>>> > a >>>> > 5n >>>> > ``` >>>> > >>>> > >>>> > var small = BigInt(5n); >>>> > var big = BigInt(5555555555555555555555555500003n); >>>> > JSON.stringify([big.toString(),small.toString()]); >>>> > >>>> > which generates ["5555555555555555555555555500003","5"] >>>> > >>>> > Anders >>>> > >>>> > > var small = 5n; >>>> > > var big = 5555555555555555555555555500003n; >>>> > > >>>> > > n suffix as from >>>> > > https://github.com/tc39/proposal-bigint >>>> > > >>>> > > JSON Number serialization has apparently reached a new >>>> level (of confusion). >>>> > > >>>> > > Personally I don't see the problem. XML did just fine >>>> without hard-coded data types. >>>> > > >>>> > > The JSON type system is basically a relic from >>>> JavaScript. As such it has proved to be quite useful. >>>> > > However, when you are outside of that scope, the point >>>> with the JSON type system gets pretty much zero since you anyway need to >>>> map extended types. >>>> > > >>>> > > Oracle's JSON-B solution which serializes small values as >>>> Number and large values as String rather than having a unified >>>> serialization based on the underlying data type seems like a pretty broken >>>> concept although indeed fully conforming to the JSON specification. "Like >>>> the Devil reads the Bible" as we say in Scandinavia :-) >>>> > > >>>> > > Adding a couple of double quotes is a major problem? If >>>> so, it seems like a way more useful project making quotes optional for keys >>>> (named in a specific way), like they already are in JavaScript. >>>> > > >>>> > > Yeah, and of course adding support for comments. >>>> > > >>>> > > >>>> > > I'd rather not see numbers converted to strings; that would be >>>> required to allow application handling of values; at a layer higher than >>>> JSON core itself. It is nice that JSON keeps numbers as numbers and >>>> strings as strings without needing intimite knowledge about the actual >>>> 'types' they end up in. >>>> > > >>>> > > Comparing numeric length would be a half/useless solution >>>> since bigints are required to interop with other bigints only; so small >>>> numbers couldn't be 'guessed' and the application would have to provide a >>>> reviver. >>>> > > >>>> > > >>>> > > >>>> > > Anders >>>> > > >>>> > > _______________________________________________ >>>> > > es-discuss mailing list >>>> > > es-discuss@mozilla.org <mailto:es-discuss@mozilla.org> >>>> <mailto:es-discuss@mozilla.org <mailto:es-discuss@mozilla.org>> >>>> > > https://mail.mozilla.org/listinfo/es-discuss >>>> > > >>>> > > >>>> > > >>>> > > _______________________________________________ >>>> > > es-discuss mailing list >>>> > > es-discuss@mozilla.org <mailto:es-discuss@mozilla.org> >>>> > > https://mail.mozilla.org/listinfo/es-discuss >>>> > > >>>> > >>>> > >>>> > On Sat, Jul 14, 2018 at 9:23 PM Anders Rundgren < >>>> anders.rundgren....@gmail.com <mailto:anders.rundgren....@gmail.com>> >>>> wrote: >>>> > >>>> > On 2018-07-15 04:27, J Decker wrote: >>>> > > >>>> > > >>>> > > On Sat, Jul 14, 2018 at 1:36 AM Anders Rundgren < >>>> anders.rundgren....@gmail.com <mailto:anders.rundgren....@gmail.com> >>>> <mailto:anders.rundgren....@gmail.com <mailto: >>>> anders.rundgren....@gmail.com>>> wrote: >>>> > > >>>> > > var small = BigInt("5"); >>>> > > var big = BigInt("5555555555555555555555555500003"); >>>> > > JSON.stringify([big,small]); >>>> > > VM330:1 Uncaught TypeError: Do not know how to serialize a >>>> BigInt >>>> > > at JSON.stringify (<anonymous>) >>>> > > at <anonymous>:1:6 >>>> > > >>>> > > >>>> > > is BigInt the only way to create a BigInt ? Or did they also >>>> implement the 'n' suffix, which I noted here >>>> https://github.com/tc39/proposal-bigint/issues/24#issuecomment-392307848 >>>> would easily distinguish bigint from other numbers; and be easy to add on >>>> the parsing side; and call BigInt(xxx) instead of Number(xxx). >>>> > >>>> > This problem is related to the BigInt object itself. If you >>>> create such using the 'n' notation you get the same result. >>>> > >>>> > If you want to use BigInt with JSON you have to serialize it >>>> yourself: >>>> > >>>> > var small = BigInt(5n); >>>> > var big = BigInt(5555555555555555555555555500003n); >>>> > JSON.stringify([big.toString(),small.toString()]); >>>> > >>>> > which generates ["5555555555555555555555555500003","5"] >>>> > >>>> > Anders >>>> > >>>> > > var small = 5n; >>>> > > var big = 5555555555555555555555555500003n; >>>> > > >>>> > > n suffix as from >>>> > > https://github.com/tc39/proposal-bigint >>>> > > >>>> > > JSON Number serialization has apparently reached a new >>>> level (of confusion). >>>> > > >>>> > > Personally I don't see the problem. XML did just fine >>>> without hard-coded data types. >>>> > > >>>> > > The JSON type system is basically a relic from >>>> JavaScript. As such it has proved to be quite useful. >>>> > > However, when you are outside of that scope, the point >>>> with the JSON type system gets pretty much zero since you anyway need to >>>> map extended types. >>>> > > >>>> > > Oracle's JSON-B solution which serializes small values as >>>> Number and large values as String rather than having a unified >>>> serialization based on the underlying data type seems like a pretty broken >>>> concept although indeed fully conforming to the JSON specification. "Like >>>> the Devil reads the Bible" as we say in Scandinavia :-) >>>> > > >>>> > > Adding a couple of double quotes is a major problem? If >>>> so, it seems like a way more useful project making quotes optional for keys >>>> (named in a specific way), like they already are in JavaScript. >>>> > > >>>> > > Yeah, and of course adding support for comments. >>>> > > >>>> > > >>>> > > I'd rather not see numbers converted to strings; that would be >>>> required to allow application handling of values; at a layer higher than >>>> JSON core itself. It is nice that JSON keeps numbers as numbers and >>>> strings as strings without needing intimite knowledge about the actual >>>> 'types' they end up in. >>>> > > >>>> > > Comparing numeric length would be a half/useless solution >>>> since bigints are required to interop with other bigints only; so small >>>> numbers couldn't be 'guessed' and the application would have to provide a >>>> reviver. >>>> > > >>>> > > >>>> > > >>>> > > Anders >>>> > > >>>> > > _______________________________________________ >>>> > > es-discuss mailing list >>>> > > es-discuss@mozilla.org <mailto:es-discuss@mozilla.org> >>>> <mailto:es-discuss@mozilla.org <mailto:es-discuss@mozilla.org>> >>>> > > https://mail.mozilla.org/listinfo/es-discuss >>>> > > >>>> > > >>>> > > >>>> > > _______________________________________________ >>>> > > es-discuss mailing list >>>> > > es-discuss@mozilla.org <mailto:es-discuss@mozilla.org> >>>> > > https://mail.mozilla.org/listinfo/es-discuss >>>> > > >>>> > >>>> >>>> _______________________________________________ >>>> es-discuss mailing list >>>> es-discuss@mozilla.org >>>> https://mail.mozilla.org/listinfo/es-discuss >>>> >>> _______________________________________________ >> es-discuss mailing list >> es-discuss@mozilla.org >> https://mail.mozilla.org/listinfo/es-discuss >> >
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss