JavaScript ではオブジェクトのプロパティの順序は保証されていますか?
P粉663883862
P粉663883862 2023-10-12 20:05:36
0
2
479

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

リーリー

生成されるオブジェクト は常に次のようになりますか? リーリー

つまり、プロパティは追加した順序と同じですか?

P粉663883862
P粉663883862

全員に返信(2)
P粉006977956

は (ただし、常に挿入順であるとは限りません)。

ほとんどのブラウザはオブジェクト プロパティを次のように反復処理します:

  1. 昇順の正の整数キー (および整数に解析される「1」などの文字列)
  2. 文字列キー、挿入順序 (ES2015 はこれを保証し、すべてのブラウザはこれを尊重します)
  3. シンボル名 (挿入順) (ES2015 はこれを保証し、すべてのブラウザーはこれを尊重します)

一部の古いブラウザでは、カテゴリ #1 と #2 を組み合わせて、挿入順序ですべてのキーを反復処理します。キーが整数に解決される可能性が高い場合は、特定の反復順序に依存しないことが最善です。

現在の言語仕様 (ES2015 時点) 正の整数 (「7」や「99」など) に解決されるキーを除き、挿入順序は保持されます。その場合、ブラウザーの動作は異なります。たとえば、Chrome/V8 では、キーが数値に解決される場合、挿入順序は考慮されません。

古い言語仕様 (ES2015 より前) : 反復順序は技術的に未定義ですが、すべての主要なブラウザーは ES2015 の動作に準拠しています。

ES2015 の動作は、既存の動作によって言語仕様が決定される良い例であり、その逆ではないことに注意してください。下位互換性の考え方をより深く理解するには、http://code.google.com/p/v8/issues/detail?id=164 を参照してください。Chrome のバグの詳細については、Chrome のイテレーションについて説明しています。シーケンシャルの背後にある設計上の決定行動。 バグレポートの (かなり独断的な) コメントの 1 つによると:

いいねを押す +0
P粉541565322

ES2015 以降、オブジェクト の反復順序は特定のルール に従いますが、 (常に) 挿入順序 に従うわけではありません。簡単に言えば、反復順序は、文字列キーの挿入順序と数値のようなキーの昇順の組み合わせです。 リーリー

配列または

Map オブジェクト を使用することは、おそらくこれを実現するより良い方法です。 Object および を含む Map は、例外なく、挿入順序でキー を反復することが保証されています:

ES2015 より前は、オブジェクト内のプロパティの順序はまったく保証されていなかったことに注意してください。オブジェクトの定義は

ECMAScript 3rd Edition (pdf): から取得されています。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート