Chrome issue
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!
■ 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!
Nem bug
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ő.
de facto
Ugyanonnan:
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:
(http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf, 101. oldal)
Hiányosság?
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-oskeys
függvény is tetszőleges sorrendben adja vissza a kulcsokat.szöveges kulcsok