ホームページ  >  に質問  >  本文

JavaScript はオブジェクトのプロパティの順序を保証しますか?

<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粉604848588P粉604848588426日前457

全員に返信(2)返信します

  • P粉894008490

    P粉8940084902023-08-21 15:38:37

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

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

    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粉574695215

    P粉5746952152023-08-21 10:41:13

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

    これは、配列または

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

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

    :

    返事
    0
  • キャンセル返事