The Chrome behavior is especially odd - it preserves order of insertion for non-numeric keys, but iterates numeric keys in numeric order first. It also coerces numeric strings to numbers.
This code example illustrates
var foo=new Object(); foo["111_"] = 1; foo["222_"] = 2; foo["333_"] = 3; foo["444"] = 4; foo["555"] = 5; foo["666"] = 6; var str = ""; for (var key in foo) { str = str + foo[key] + " "; } document.write(str);
In Chrome this prints "4 5 6 1 2 3". In IE 7, IE 8, and Firefox, it prints "1 2 3 4 5 6".
This behavior (particularly the coercion of numeric strings) has been tracked as a bug in Chrome - but unclear whether it will ever be fixed
http://code.google.com/p/chromium/issues/detail?id=37404
ECMAScript spec says "order of enumerating... is not defined"
http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
1 comment:
Hey, this is an old post, but I've been doing some Googling today and I believe this is the answer:
http://andrewdupont.net/2006/05/18/javascript-associative-arrays-considered-harmful/
Post a Comment