Add an option to omit prototype of objects created by JSON.parse()?

段垚 duanyao at ustc.edu
Sat Oct 1 07:27:42 UTC 2016


I thought my original mail did not reach es-discuss and re-sent it.

Please refer to 
https://esdiscuss.org/topic/proposal-add-an-option-to-omit-prototype-of-objects-created-by-json-parse 


It seems the overhead of creating a prototypeless copy is significant, 
and `Object.getOwnPropertyDescriptors(v)` creates even more objects.


在 2016/10/1 11:19, Jordan Harband 写道:
> ```
> JSON.parse(str, (k, b) => {
> if (v && typeof v === 'object' && !Array.isArray(v)) {
>     return Object.create(null, Object.getOwnPropertyDescriptors(v));
>   }
>   return v;
> });
> ```
>
> On Mon, Sep 19, 2016 at 1:13 AM, 段垚 <duanyao at ustc.edu 
> <mailto:duanyao at ustc.edu>> wrote:
>
>     Hi,
>
>     It is usually a bad practice to let a map object (an plain object
>     used as a key-value map) have a prototype.
>
>     Objects created by JSON.parse() have a prototype by default, and
>     we can get rid of them by:
>
>
>     JSON.parse(str, function(k, v) {
>
>         if (v && typeof v === 'object' && !Array.isArray(v)) {
>
>            v.__proto__ = null;
>
>         }
>
>         return v;
>
>     });
>
>
>     However, implementors warn that mutating prototype causes
>     "performance hazards" [1].
>
>     How about adding an option to omit prototype of objects created by
>     JSON.parse()?
>
>     E.g.:
>
>
>     JSON.parse(str, { noPrototype: true });
>
>
>     [1]
>     https://developer.mozilla.org/en-US/docs/Web/JavaScript/The_performance_hazards_of__%5B%5BPrototype%5D%5D_mutation
>     <https://developer.mozilla.org/en-US/docs/Web/JavaScript/The_performance_hazards_of__%5B%5BPrototype%5D%5D_mutation>
>
>
>     _______________________________________________
>     es-discuss mailing list
>     es-discuss at mozilla.org <mailto:es-discuss at mozilla.org>
>     https://mail.mozilla.org/listinfo/es-discuss
>     <https://mail.mozilla.org/listinfo/es-discuss>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20161001/2781fccc/attachment.html>


More information about the es-discuss mailing list