1. ホーム
  2. javascript

[解決済み] JavaScriptはオブジェクトのプロパティの順序を保証するか?

2022-03-22 15:31:28

質問

このようなオブジェクトを作成すると

var obj = {};
obj.prop1 = "Foo";
obj.prop2 = "Bar";

生成されたオブジェクトは 常に はこのように見えますか?

{ prop1 : "Foo", prop2 : "Bar" }

つまり、プロパティは私が追加したのと同じ順番になるのでしょうか?

解決方法は?

オブジェクトの反復処理順序は以下の通りです。 ある種のルール はES2015からですが 挿入順序に(常に)従っているわけではない . 簡単に言うと、文字列のキーは挿入順、数値のようなキーは昇順の組み合わせで反復処理されます。

// key order: 1, foo, bar
const obj = { "foo": "foo", "1": "1", "bar": "bar" }

配列または Map オブジェクト は、より良い方法で実現することができます。 Map と類似している部分があります。 Object は、挿入順に反復されるキーを保証します。 例外なく

<ブロッククオート

Mapのキーは順番に並んでいますが、オブジェクトに追加されたキーはそうではありません。したがって、Map オブジェクトを反復処理すると、挿入された順にキーが返されます。(ECMAScript 2015 仕様では、オブジェクトは string および Symbol キーの作成順序を保持するので、文字列キーだけを持つオブジェクトの走査は挿入順序のキーを返すことになることに注意してください)

注意点として、ES2015以前はオブジェクト内のプロパティの順番は全く保証されていませんでした。オブジェクトの定義 より ECMAScript 第三版 (pdf) :

<ブロッククオート

4.3.3 オブジェクト

オブジェクトは 型はObjectです。 プロパティの順序不同のコレクションである それぞれの には、プリミティブな値、オブジェクト、または 関数です。に格納されている関数は オブジェクトのプロパティは メソッドを使用します。