JavaScript はオブジェクトのプロパティの順序を保証しますか?
P粉287254588
2023-08-17 17:04:41
<p>次のようなオブジェクトを作成すると: </p>
<pre class="brush:php;toolbar:false;">var obj = {};
obj.prop1 = "フー";
obj.prop2 = "バー";</pre>
<p>結果オブジェクトは常に次のようになりますか? </p>
<pre class="brush:php;toolbar:false;">{ prop1 : "Foo", prop2 : "Bar" }</pre>
<p>つまり、プロパティは追加した順序と同じですか? </p>
はい (ただし、常に広告掲載順にあるとは限りません)。
ほとんどのブラウザは、次の順序でオブジェクト プロパティを反復処理します:
一部の古いブラウザでは、カテゴリ 1 とカテゴリ 2 がマージされ、挿入順序ですべてのキーが反復処理されます。キーが整数として解析される可能性が高い場合は、特定の反復順序に依存しないことが最善です。
現在の言語仕様 (ES2015 以降) 挿入順序は保持されますが、正の整数に解決されるキー (「7」や「99」など) が異なる場合はブラウザーの動作が異なります。たとえば、Chrome/V8 では、キーが数値として解析される場合、挿入順序が考慮されません。
古い言語仕様 (ES2015 より前) : 反復順序は技術的に未定義ですが、すべての主要なブラウザーは ES2015 の動作に従います。
ES2015 の動作は、言語仕様が既存の動作によって決定される良い例であり、その逆ではないことに注意してください。この下位互換性の考え方について詳しくは、Chrome の反復順序について詳しく説明されている http://code.google.com/p/v8/issues/detail?id=164 をご覧ください。動作設計の決定のための Chrome バグレポート。 このバグレポートの (かなり主観的な) コメントによると:
ES2015 以降、オブジェクトの反復順序は 特定のルール に従いますが、 必ずしも挿入順序 に従うわけではありません。つまり、反復順序は、文字列キーの挿入順序と数値のようなキーの昇順の組み合わせです。 リーリー
これは、配列またはMap
ECMAScript 3rd Edition のオブジェクト定義 (pdf)オブジェクト
を使用するとより適切に実現できます。 Mapには
Objectといくつかの類似点があり、
は例外なく、挿入順序でキー を反復することが保証されています。 ES2015 より前では、オブジェクト内の属性の順序はまったく保証されていなかったことに注意してください。: