2009-05-28 5 views
2

可能性の重複:
Elements order - for (... in ...) loop in javascript
javascriptのオブジェクト変数は追加された順序で列挙されますか?

は、あなたがこのようなコードがあるとします。

var a = {} 
a.a = 1; 
a.c = 2; 
a.b = 3; 

for (var i in a) { 
    console.log(a[i]); 
} 

は1、2、および3の順に印刷することが保証されていますか?私はテストしましたが、これはこれまでのケースでしたが、それがいつも真実かどうかはわかりません。これをしないブラウザはありますか?オブジェクトの削除、継承のプロトタイプの作成など、何か変わったことはありません。オブジェクトにプロパティを追加するだけです。

+1

これは良い質問ですが、実際は重複しています。http://stackoverflow.com/questions/280713/elements-order-for-in-loop-in-javascript、question id 280713 –

答えて

3

Chromeを除くすべての現在のブラウザは、定義された順序と同じ順序でオブジェクトのプロパティをループします。

クロムバグレポート:http://code.google.com/p/chromium/issues/detail?id=883です。現在、WontFixとマークされています。

+0

http:// www.ecma-international.org/publications/files/ECMA-ST/Ecma-357.pdf:アイテムがコレクション のメンバーにバインドされる順序は、実装に依存します。注文が重要なときに配列を使用する方が適切かもしれないと思います。 – harto

+0

@harto:素敵なリンク。その引用は実際には新しい "for each"ループ構造を指していますが、 "for in"と同じことを言う類似の文書がどこかにあります。いずれにしても、V8はすぐにこれを「修正」しない理由です。 –

+0

@harto:ecmascript 5の順序は、挿入順であると定義されています – olliej

1

私の現在のバージョンのChrome(2.0.172.28)では、John Resigのテストケースが合格していますので、現在はChromeで修正されている可能性がありますか?

関連する問題