Java 言語とは異なり、JavaScript の配列には 3 つの特徴があります:
1. タイプはありません。配列のメンバーは任意の型にすることができ、同じ配列を異なる型の多数のメンバーで構成することもできます。
2. 長さは可変です。配列の長さは動的に変更できるため、JavaScript での配列アクセスに関する範囲外の問題は発生しません。
3. 不連続性。配列内のメンバーの位置は、連続的 (0、1、2、3...) または不連続の場合があります。すべての配列には、長さという名前の属性があります。配列メンバーが連続している場合、長さの値は配列メンバーの数と一致しますが、配列メンバーが不連続である場合、長さの値は配列メンバーの数より大きくなります。連続配列と比較して、不連続配列の読み取りおよび書き込みパフォーマンスは悪くなります。
実験:
上記の例からわかるように、不連続な配列の場合、欠落しているメンバーにアクセスすると、JavaScript は未定義を返します。配列が連続していても、そのメンバーの 1 つが未定義の場合、配列にアクセスした結果は同じになります:
配列が不連続でメンバーが欠落している場合と、配列が連続しているが未定義のメンバーが存在する場合、どちらの場合も、配列の内容にアクセスした結果は同じです。ただし、主に配列キーへのアクセスにおいて、この 2 つの間にはまだ微妙な違いがいくつかあります。
これら 2 つのケースでは、コンテンツにアクセスして得られる結果は同じですが、内部メカニズムが完全に異なっていることがわかります。配列が不連続な場合、特定のメンバーが欠落しているため、そのメンバーにアクセスすると、JavaScript は未定義を返します。 ; 配列が連続の場合、すべてのメンバーが存在しますが、一部のメンバーの値は特殊であり、未定義です。
上記の例からわかるように、JavaScript の配列は本質的には数字をキーとした単なるオブジェクトであり、通常のキーと値のペアと何ら変わりません。実際、配列に対する読み取りおよび書き込み操作の際、JavaScript はパラメーターを正の整数に変換しようとします。変換が成功すると、配列操作が実行されます (配列の長さプロパティは自動的に更新されます)。失敗すると、パラメータは文字列に変換され、通常のオブジェクトに対する読み取りおよび書き込み操作が実行されます。もちろん、JavaScript インタプリタの実装では、数値をキーとして使用する配列の機能に対して多くのパフォーマンスの最適化が行われています。そのため、実際の使用では、オブジェクトのキーがすべて数値の場合は、 を直接使用します。配列オブジェクトを使用すると、より効率的な結果が得られます。
配列を定義するプロセス中、JavaScript では冗長なカンマや 2 つのカンマ間の配列メンバーの欠落を許可します。
配列の作成に関して、JavaScript は 4 つのメソッドをサポートしています:
1. リテラル (上記の例の括弧式など) を使用して、配列オブジェクトを直接作成します。
2. パラメータを渡さずに Array() コンストラクタを使用します。この場合、空の配列が作成され、[] と同じ効果があります。
3. Array() コンストラクターを使用し、配列の長さとして正の整数を渡します。この場合、JavaScript はこの配列を保存するために対応するメモリ空間を予約します。この時点では配列のキーが定義されていない、つまり配列内にメンバーが存在しないことに注意してください。効果は[,,,,]
と同じです
4. Array() コンストラクターを使用して、配列のメンバーを渡します。
実験:
var m = new Array(42, 33, 99, "test", {k:99});
console.log(m);//[42, 33, 99, "テスト", オブジェクト {k=99}]