i support @anders’ *conservative* scheme and opened up a github-issue to try and get it included before stage-4 [1]. this might be one of the last-opportunities to change the behavior before its set-in-stone.
there was a previous github-issue on bigint JSON-support [2] (that led to the current behavior no one is happy about), but it never discussed the *conservative* scheme, hence the revisit. to summarize, the *conservative* scheme basically copies the same JSON-behavior as Date. users are already familiar with serializing Date, so there shouldn’t be any surprises (or at least less-surprises than throwing an error). this is the simplest, actionable, and least-offensive-to-all-parties solution i can think of (unless someone has a less-offensive-to-all idea). its also applicable in solving the same-issue for future primitives like BigDecimal. ```js var aa; // we copy JSON-behavior of Date aa = 12345678901234567890n // <bigint primitive> aa = JSON.stringify(aa) // '"12345678901234567890"' (escaped string) aa = JSON.parse(aa) // '12345678901234567890' (un-escaped string) aa = BigInt(aa) // <bigint primitive> (no precision-loss) aa = new Date() // <Date object> aa = JSON.stringify(aa) // '"2018-07-28T09:41:47.519Z"'' (escaped string) aa = JSON.parse(aa) // '2018-07-28T09:41:47.519Z' (un-escaped string) aa = new Date(aa) // <Date object> ``` [1] github-issue - revisit: Support JSON serialisation of BigInt values https://github.com/tc39/proposal-bigint/issues/162 <https://github.com/tc39/proposal-bigint/issues/162> [2] github-issue - [closed] Support JSON serialisation of BigInt values https://github.com/tc39/proposal-bigint/issues/24 <https://github.com/tc39/proposal-bigint/issues/24> kai zhu kaizhu...@gmail.com > On 29 Jul 2018, at 12:17 PM, Anders Rundgren <anders.rundgren....@gmail.com> > wrote: > > As I have tried (apparently in vain) to describe, the other languages already > have solutions for BigInt (and much more), which the respectively authors > consider both sufficient and good. > > ES6 is pretty late in the game and therefore rather have to adapt itself to > the other players. > > These are the options: > https://esdiscuss.org/topic/json-support-for-bigint-in-chrome-v8#content-30 > > - "Conservative" works right out of the box (although in a somewhat inelegant > way). It is backward compatible with many existing ES and non-ES JSON based > applications. > > - "RFC8259" support would require changes to the ES6 JSON object. For > parsing (`JSON.parse2()`), a `JSONNumber` object as proposed by Michael > Theriot seems like a candidate. > > I have limited faith in extending the (for general purpose information > interchange) already pretty deficient JSON type scheme; state-of-the-art > applications check indata anyway making explicit type information redundant. > > Anders
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss