ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript の配列は本当に連続しているのでしょうか?

JavaScript の配列は本当に連続しているのでしょうか?

DDD
リリース: 2024-11-15 17:43:02
オリジナル
715 人が閲覧しました

Are JavaScript Arrays Really Contiguous?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート