Firefox では、JS オブジェクトの列挙に一貫性がないようです。
コード:
var a = {"3":"a", "2":"b", "foo":"c", "1":"d"};
var str = "";
for(var n in a) { str += n + " = " + a[n] + "\n"; }
alert(str);
Windows での FF22 の結果:
1 = d
2 = b
3 = a
foo = c
期待される結果 (および Linux 上の FF20 で得られるもの):
3 = a
2 = b
foo = c
1 = d
要素を挿入したときと同じ順序に保つにはどうすればよいですか?
ECMA の仕様では、列挙を行う方法が規定されていないため、バグとは言えません。しかし、挿入された順序で要素が必要です。(理由: サーバー側で順序付けされた JSON でエンコードされたハッシュ テーブルを取得します。最近まで順序が維持されていましたが、キーによって順序付けられているため、リスト全体が混乱しています)