Firefox 21(Nightly) でオブジェクトのキー順序がES.nextで提案されているものに
今まで、FirefoxのJSエンジン、SpiderMonkeyでは、オブジェクトのキーの順序は定義された順だった。
var o = { 2: 0, 3: 1, a: "A", 1: 2, }; o[0] = 0; for (var key in o) { console.log(key + ":" + o[key]); }
2: 0 3: 1 a: A 1: 2 0: 0
という感じ。
いつからか、細かいところは知らないけど、Firefox 21で確認したところ、順序がECMAScript.nextで提案されている順序に変更されていた。strawman:enumeration [ES Wiki]
これは、0を含む自然数(uint32)になりえるキー("2" なら 2 に変換可能)なら、その順に、他は定義順にしようというもの。
よって Firefox 21からは
0: 0 1: 2 2: 0 3: 1 a: A
という順に並び替えられますよと。
この辺り、ECMAScript仕様で定義されて無かったと思う、各実装任せだったわけだけど、仕様として入ってくると嬉しいですね(何が