Nailing object property order

Jordan Harband ljharb at gmail.com
Thu Apr 16 01:52:29 UTC 2015


For what it's worth, forcing an enumeration order does make polyfilling
harder, assuming there's an engine out there that *doesn't* already use
that ordering.

On Wed, Apr 15, 2015 at 6:39 PM, <a.d.bergi at web.de> wrote:

> Hello!
> Why does ES6 specify the order of keys in objects, maps and sets?
> Specifically section 9.1.12 [[OwnPropertyKeys]] says the result list must
> be "integer indices in ascending numeric, then strings in property creation
> order, then symbols in property creation order".
> Similarly, 23.1.3.5 Map.prototype.forEach and 23.2.3.6
> Set.prototype.forEach use the "original insertion order" of keys for their
> callbacks, and also their respective @@iterators use the ordered "entries"
> lists.
>
> What was the motivation to pin these down in ES6?
>
> In ES5, objects were intrinsically unordered. ES3 was explicit about that
> an "object is an unordered collection of properties", the same thing is
> still in JSON for example, where objects are defined as "unordered set of
> name/value pairs".
> ES5 did only specify that for-in and Object.keys should use the same order
> ("if an implementation specifies one" at all). ES6 didn't even tighten
> this, it only describes it with a new [[enumerate]]-mechanism.
>
> But would it be reasonable to expect that every implementation will use
> the same order in for-in loops and Object.keys as in
> Object.getOwnPropertyNames/Symbols property listings? I can't imagine how a
> different ordering would be helpful for an implementation.
>
> To me, a fixed order sounds like an arbitrary restriction. There would
> always be a little overhead in remembering the order, and it would prevent
> optimisations that could treat {x:1, y:2} and {y:2, x:1} as having the same
> structure.
> And while ordered maps/sets are a good thing, they are not really sortable
> by ones own criteria. If I wanted to insert a value at a certain position,
> I'd need to first clear the map/set and then re-append all entries in the
> desired order. There will surely be people who want to use maps/sets like
> that, and I wonder whether it was deliberately made that
> complicated/inperformant to support this use case.
>
> Does anyone share my concerns? The only thing I've found online was
> "deterministic enumeration" <
> https://mail.mozilla.org/pipermail/es-discuss/2013-April/030204.html>,
> pointers to other discussions are welcome.
>
>  Bergi
>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20150415/c05f5db2/attachment.html>


More information about the es-discuss mailing list