次のようなオブジェクトを作成すると:
生成されるオブジェクト は常に次のようになりますか? リーリー
は (ただし、常に挿入順であるとは限りません)。
ほとんどのブラウザはオブジェクト プロパティを次のように反復処理します:
一部の古いブラウザでは、カテゴリ #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 オブジェクト を使用することは、おそらくこれを実現するより良い方法です。 Object および を含む Map は、例外なく、挿入順序でキー を反復することが保証されています:
オブジェクト を使用することは、おそらくこれを実現するより良い方法です。
および
Map
ECMAScript 3rd Edition (pdf): から取得されています。
は (ただし、常に挿入順であるとは限りません)。
ほとんどのブラウザはオブジェクト プロパティを次のように反復処理します:
一部の古いブラウザでは、カテゴリ #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
ES2015 より前は、オブジェクト内のプロパティの順序はまったく保証されていなかったことに注意してください。オブジェクトの定義はオブジェクト を使用することは、おそらくこれを実現するより良い方法です。
Objectおよび
を含むMap
は、例外なく、挿入順序でキー を反復することが保証されています:ECMAScript 3rd Edition (pdf): から取得されています。