あなたはいつも疑問にするときのECMAScript標準を参照することができます。Array Exotic Objects
アレイは、lengthプロパティが0からの整数であるプロパティに敬意をどのように扱われるかについて、追加のセマンティックを持っている言語でオブジェクトの特別な種類です〜2^32。 javascriptでは、除外されたlengthプロパティに0の範囲に欠損値がある場合、配列は疎である可能性があります。 forEachは欠損値を無視します。
欠損値とは何ですか?
言語は、通常のオブジェクトに対してできるだけ多くの動作をさせます。プロパティを追加したり、オブジェクトを配列から継承したりすることもできます。
var fruits = ["Apple", "Banana"];
fruits.preferred = "Apple";
この種のコードは問題を提起しませんが、書き始める場合:
fruits[100] = "Strawberry";
for(let i = 0; i < fruits.length; ++i) {
...
}
100そうです^ 32 [0、2)の範囲内のプロパティ名です配列要素ですが、この時点ではfruits.lengthはどのようにすべきでしょうか?これは101でなければなりません。それ以外の場合、forループは決して "Strawberry"を取得しません。
しかし、この時点では決して定義されていない要素[2,99]の範囲があることを受け入れる必要があります。これらは値がありません。あなたはlengthプロパティ
var fruits = ["Apple", "Banana"];
fruits.length = 0;
を変更する場合
逆に同じことが今、forループの条件を満たしている必要があり、配列の任意の要素を得ることはありません。これは、果物の配列を空に相当します。
それはあなたが昇順にそのすべての要素を反復が、値が欠落していることができることを心に留めておくことができますように、イエスの配列が順序付けられている欠損値に
を持っていることの結果で、長さをインクリメントすることも可能です
配列は順序付けされたコレクションです。 – MinusFour
なぜ配列の順序が保持されないと思いますか?私が知る限り、物件の不動産の注文のみが保証されていません。 – Xufox
私は注文が(他の言語で)保存されていない状況に遭遇しています。 – Dementic