Ordering

liorean liorean at gmail.com
Sat May 31 11:34:21 PDT 2008


2008/5/31 Douglas Crockford <douglas at crockford.com>:
> This program...
>
> <html>
> <body><script>
> (function () {
>     var keys = [
>         'koda', 0, 'bosanda', 1, 'bosoya', 2
>     ];
>
>     var object = {}, table, i, name;
>
>     for (i = 0; i < keys.length; i += 1) {
>         object[keys[i]] = i;
>     }
>
>     i = 0;
>     table = '<table><tbody><tr><th>' +
>         'Insertion Order</th><th><code>for in</code> Order</th></tr>';
>     for (name in object) {
>         table += '<tr><td>' + keys[i] + '</td><td>' + name + '</td></tr>';
>         i += 1;
>     }
>     table += '</tbody></table>';
>     document.write(table);
> })();
> </script>
> </body></html>
>
> ...produces this result on current editions of Internet Explorer, Firefox, and
> Safari:
>
> Insertion Order for in Order
> koda    koda
> 0       0
> bosanda bosanda
> 1       1
> bosoya  bosoya
> 2       2
>
> It produces this result for Opera:
>
> Insertion Order for in Order
> koda    0
> 0       1
> bosanda 2
> 1       koda
> bosoya  bosanda
> 2       bosoya
>
> Opera appears to be optimizing array-like sequences.

Opera stores property names that are array indexes in a more space
efficient manner than other property names, at the cost of not
preserving insertion order when enumerating the properties.

> What should ES3.1 say about member ordering? Should it remain unordered, or
> should Opera be required to conform, or should the other three be forced to
> adopt Opera's optimization?

ES4 requires enumeration order to follow insertion order, so the space
optimisation Opera does break the ES4 rules. Opera have bugs about
property access being a performance problem, and in the process of
fixing that may change to another storage system, so aligning with
Opera's current behaviour would be a bad idea.

I think ES3.x should either follow ES4 or stay silent on the issue,
especially considering Opera is the only browser that doesn't use
insertion order enumeration.
-- 
David "liorean" Andersson



More information about the Es4-discuss mailing list