JavaScript の疎配列
JavaScript でよくある誤解は、配列が連続している、つまりインデックス 0 からのすべての要素が含まれているという前提です。現在の長さに。ただし、これは当てはまりません。JavaScript 配列はスパースです。
要素がアクセスされるか、現在の長さより大きいインデックスを使用して設定されると、空のスロットが作成され、配列は適切なスロットに拡張されます。サイズ。たとえば、array[Date.getTime()] を使用して値を設定すると、インデックス 0 から現在時刻までの空のスロットが含まれるように配列が拡張されます (これらのスロットは使用されません)。
ハッシュ テーブルの実装
スパース配列は内部的にハッシュ テーブルとして実装されます。整数、文字列、浮動小数点数、その他のオブジェクトのキーは、ハッシュに追加される前に toString() を使用して文字列に変換されます。これにより、柔軟なインデックス システムが可能になります。
テスト例
配列のスパースな性質を確認するには、次のテスト コードを検討してください:
var array = []; array[0] = "zero"; array[new Date().getTime()] = "now"; array[3.14] = "pi"; for (var i in array) { alert("array[" + i + "] = " + array[i] + ", typeof(" + i + ") == " + typeof(i)); }
このコードは次のように表示されます:
array[0] = zero, typeof(0) == string array[1254503972355] = now, typeof(1254503972355) == string array[3.14] = pi, typeof(3.14) == string
for...in 構文は反復されます。これは、非シーケンシャル インデックスを持つ要素にアクセスまたは設定するときに、配列が空のスロットで拡張されることを示しています。
ブラウザの違い
異なるブラウザはスパース配列を処理します同様の方法で、配列をハッシュ テーブルとして実装します。ただし、非常に大きなインデックスを扱う場合は、メモリ消費とパフォーマンスに影響を与える可能性があるため、スパース配列の使用を考慮することが重要です。
以上がJavaScript の配列は本当に連続しているのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。