JavaScript はオブジェクトのプロパティの順序を保証しますか?
P粉287254588
P粉287254588 2023-08-17 17:04:41
0
2
524
<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>
P粉287254588
P粉287254588

全員に返信(2)
P粉186897465

はい (ただし、常に広告掲載順にあるとは限りません)。

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

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

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

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

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

ES2015 の動作は、言語仕様が既存の動作によって決定される良い例であり、その逆ではないことに注意してください。この下位互換性の考え方について詳しくは、Chrome の反復順序について詳しく説明されている http://code.google.com/p/v8/issues/detail?id=164 をご覧ください。動作設計の決定のための Chrome バグレポート。 このバグレポートの (かなり主観的な) コメントによると:

いいねを押す +0
P粉478445671

ES2015 以降、オブジェクトの反復順序は 特定のルール に従いますが、 必ずしも挿入順序 に従うわけではありません。つまり、反復順序は、文字列キーの挿入順序と数値のようなキーの昇順の組み合わせです。 リーリー

これは、配列または

Map オブジェクト を使用するとより適切に実現できます。 Map には Object といくつかの類似点があり、 は例外なく、挿入順序でキー を反復することが保証されています。 ES2015 より前では、オブジェクト内の属性の順序はまったく保証されていなかったことに注意してください。

ECMAScript 3rd Edition のオブジェクト定義 (pdf)

:

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