3

javascript は、新しい値がキーに割り当てられた場合でも、オブジェクトのキーのシーケンスが保持されることを保証しますか?

たとえば、次のオブジェクトがある場合

var Object = {
    keyX: value1,
    keyB: value2,
    keyZ: value3
}

を使用してキーを反復処理するfor .. inと、適切なシーケンスが得られますkeyX, keyB, keyZ。の値を変更してkeyBも、繰り返しで同じシーケンスが得られます。

私の質問は、シーケンスは常に同じままですか、それとも変更される可能性があるかということです。

4

1 に答える 1

6

まあ、それはドキュメント(MDN)で非常に明確に述べられています:

for...in ループは、オブジェクトのプロパティを任意の順序で繰り返します。

ドキュメントのこのセクションでは、これについてより包括的な説明を提供します。

ECMAScript はオブジェクトの反復順序を実装に依存させますが、すべての主要なブラウザは最初に追加されたプロパティに基づく反復順序をサポートしているように見えるかもしれません (少なくともプロトタイプにないプロパティの場合)。ただし、Internet Explorer の場合、プロパティで削除を使用すると、いくつかの紛らわしい動作が発生し、他のブラウザーがオブジェクト リテラルのような単純なオブジェクトを順序付き連想配列として使用できなくなります。

エクスプローラーでは、プロパティ値が実際には未定義に設定されていますが、後で同じ名前のプロパティを再度追加すると、プロパティは元の位置で繰り返されます。プロパティを削除してから、再度追加しました。

于 2012-09-12T12:45:27.683 に答える