次のようなオブジェクトを作成すると:
var obj = {};
obj.prop1 = "Foo";
obj.prop2 = "Bar";
結果のオブジェクトは常にこのように見えるでしょうか?
{ prop1 : "Foo", prop2 : "Bar" }
つまり、プロパティは追加した順序と同じ順序になりますか?
ベストアンサー1
オブジェクトの反復順序は以下のとおりです一定のルールES2015 以降では、挿入順序に (常に) 従うわけではありません。簡単に言うと、反復順序は、文字列キーの挿入順序と数値のようなキーの昇順の組み合わせです。
// key order: 1, foo, bar
const obj = { "foo": "foo", "1": "1", "bar": "bar" }
配列またはMap
物体これを達成するためのより良い方法である可能性があります。Map
いくつかの類似点を共有しObject
、キーが挿入順に反復されることを保証する、 例外なく:
Map 内のキーは順序付けされていますが、オブジェクトに追加されたキーは順序付けされていません。したがって、反復処理すると、Map オブジェクトは挿入順にキーを返します。(ECMAScript 2015 仕様では、オブジェクトは文字列キーとシンボル キーの作成順序を保持するため、文字列キーのみを持つオブジェクトを走査すると、挿入順にキーが返されることに注意してください)
注意:ES2015以前は、オブジェクト内のプロパティの順序はまったく保証されていませんでした。ECMAScript 第 3 版 (pdf):
4.3.3 オブジェクト
オブジェクトは、Object 型のメンバーです。オブジェクトは、それぞれがプリミティブ値、オブジェクト、または関数を含むプロパティの順序付けられていないコレクションです。オブジェクトのプロパティに格納されている関数は、メソッドと呼ばれます。