JavaScript はオブジェクトのプロパティの順序を保証しますか?
P粉604848588
2023-08-20 17:42:13
<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 の動作は、言語仕様が既存の動作によって決定される良い例であり、その逆ではないことに注意してください。下位互換性に関するこの考え方の詳細については、詳細な紹介である http://code.google.com/p/v8/issues/detail?id=164 を参照してください。 Chrome への Chrome のバグ報告により、反復的な逐次的な動作設計の決定を行うことができます。 このバグレポートの (かなり主観的な) コメントの 1 つによると:
ES2015 以降、オブジェクトの反復順序は 特定のルール に従いますが、必ずしも挿入順序に従うわけではありません。簡単に言えば、反復順序は、文字列キーの挿入順序と数値のようなキーの昇順の組み合わせです。 リーリー
これは、配列またはMap
ECMAScript 3rd Edition のオブジェクト定義 (pdf)オブジェクト
を使用するとより適切に実現できます。 Mapには
Objectといくつかの類似点があり、
は例外なく、挿入順序でキー を反復することが保証されています。 ES2015 より前は、オブジェクト内のプロパティの順序はまったく保証されていなかったことに注意してください。: