ugrás a tartalomhoz

Chrome issue

gphilip · 2010. Május. 4. (K), 00.36
Hali kollegák!

Néhányszor volt szerencsém segíteni egy-két társunknak itt (is), a Weblabor oldalain. Most én kérem a segítségeketet, de nem elsősorban szakmai tanácsra van szükségem.

Már-már személyes az ügy :) A Chrome jelen verziója tartalmaz egy bugot, ami valószínűleg egyszerűen javítható, viszont az egyik projektben, amin dolgozunk, fontos szerepet játszik.

Ezért arra kérek mindenkit, akinek van szabad 5 másodperce, hogy szavazzon erre a Chrome issue-ra a bal felső sarokban található fehér csillagra történtő kattintással:

http://code.google.com/p/chromium/issues/detail?id=37404

A dolog csak akkor működik, ha be vagy bejelentkezve a Google accoddal.

Nem mellesleg érdekes lehet a dolog annak, aki gyakran dolgozik objektumokkal Javascriptben. Ha gondoljátok, lehet beszélgetés tárgya az, hogy mennyire bugról van szó, mint inkább "feature"-ről :) A lényeg, hogy a Chrome a numerikus JS objektumok kulcsait automatikusan sorrendezi iteráció során.

Köszönöm mindenkinek!
 
1

Nem bug

Poetro · 2010. Május. 4. (K), 00.58
A for...in definíciója szerint teljesen jól működik:
A for...in loop iterates over the properties of an object in an arbitrary order

Azaz tetszőleges sorrendben jöhetnek vissza az elemek, a specifikációnak nincsen követelménye az eredmények sorrendjét illetően, csak az a fontos, hogy minden elem pontosan egyszer forduljon elő.
2

de facto

gphilip · 2010. Május. 4. (K), 01.23
Igen, jogos. Akkor inkább eltérésnek nevezném a de facto standard-től (mivel az összes többi böngésző a bugreportban leírt módon működik, normál esetben), tehát kompatibilitási probléma.

Ugyanonnan:
Although ECMAScript makes iteration order of objects implementation-dependent, it may appear that all major browsers support an iteration order based on the earliest added property coming first (at least for properties not on the prototype).

However, in the case of Internet Explorer, when one uses delete on a property, some confusing behavior results, preventing other browsers from using simple objects like object literals as ordered associative arrays. In Explorer, while the property value is indeed set to undefined, if one later adds back a property with the same name, the property will be iterated in its old position--not at the end of the iteration sequence as one might expect after having deleted the property and then added it back.


Mellesleg ha az ECMAScript specifikációja ennyire laza ebben a témában, azt komoly hiányosságnak gondolom, és valóban:

The mechanics and order of enumerating the properties (step 6.a in the first algorithm, step 7.a in the second) is not specified.


(http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf, 101. oldal)
3

Hiányosság?

Poetro · 2010. Május. 4. (K), 02.46
Mellesleg ha az ECMAScript specifikációja ennyire laza ebben a témában, azt komoly hiányosságnak gondolom

Ez a viselkedés a nyelv alapjai óta így van leírva, azaz a szabványban így van lefektetve, és a böngészőknek a szabványt kell követni. Különben lehetséges, hogy a Chrome V8 motorjának így optimálisabb a futása, ezért így valósították meg, és ezt a szabvány meg is engedi, nincs miért felróni neki, elvégre a szabvány régebbi, mint maga a Google.

Egyébként ez egy eléggé jellegzetes vonás a JavaScript tekintetében, mivel az 1.6-ban bevezetett for each ... in, az 1.7-ben bevezetett iterator se követel meg az elemek sorrendjét.

Különben hasonló viselkedés az adatbázismotorok esetén, amikor nincs ORDER BY megadva, akkor a motor olyan sorrendben adja vissza a sorokat, ahogy neki optimális. De van még pár ilyen eset a programozási nyelvek között, a JavaScript nem kivételes ebben a tekintetben. A Python-os keys függvény is tetszőleges sorrendben adja vissza a kulcsokat.
4

szöveges kulcsok

gphilip · 2010. Május. 4. (K), 02.54
Nem mellesleg a Chrome az általánosan elfogadott viselkedés szerint rendezi az objektum tujadonságait, amennyiben azok nem reprezentálnak számértéket, tehát bármilyen szöveges kulcsról van szó.