for-in evaluation order

Dmitry A. Soshnikov dmitry.soshnikov at gmail.com
Mon Dec 27 03:45:52 PST 2010


On 27.12.2010 14:39, Michael Day wrote:
> Hi,
>
> Some quick testing with Firefox seems to show that for-in returns 
> properties in the order they were added to the object, and some 
> scripts on the web (eg. RaphaelJS) seem to depend on that, unless I'm 
> horrendously misinterpreting them. This seems... bad?
>

Yes, it's bad. Because the spec really statements that the order of 
evaluation isn't specified. Moreover, some side-effects, e.g. 
`delete`ing of properties or adding new is also not specified directly, 
though there is a mention on it. IIRC, there was a case with JScript 
(IE) and these side-effects. Regarding non-specificity enumeration, 
there was/is a case with V8 (Chrome).

However, IMO, it's bad from the spec viewpoint (even if such a agreement 
is taken in price of optimization). I think (and sure many programmers 
will agree) that the consistent is more important. And the syntactic 
(lexical) appearing properties in the object should be enumerated in the 
same order. Adding/removing while enumeration also should be handled 
correctly.


> Are objects implicitly ordered, by implementation convention?
>

In some implementations -- yes, in some -- not. So, it's not recommended 
to rely on it. Though, repeat, I'd change the spec instead.

Dmitry.


More information about the es-discuss mailing list