Nailing object property order

Jordan Harband ljharb at
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> 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, Map.prototype.forEach and
> 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" <
> pointers to other discussions are welcome.
>  Bergi
> _______________________________________________
> es-discuss mailing list
> es-discuss at
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the es-discuss mailing list