Java言語とは異なり、JavaScriptの配列には3つの機能があります。
1.タイプなし。配列のメンバーは任意のタイプであり、同じ配列をさまざまなタイプのメンバーで構成することもできます。
2。長さは可変です。アレイの長さは動的に変更できるため、JavaScriptの配列アクセスの範囲外の問題はありません。
3。不連続。配列内のメンバーの位置は、連続(0、1、2、3…)または不連続にすることができます。任意の配列には、長さと呼ばれる属性があります。配列メンバーが連続している場合、長さの値は配列メンバーの数と一致します。配列メンバーが継続的でない場合、長さの値は配列メンバーの数よりも大きくなります。連続配列と比較して、不連続な配列の読み取りと書き込みのパフォーマンスはさらに悪化します。
実験:
コードコピーは次のとおりです。
var o = [42、 "sample text"、{x:88}]; // javascriptアレイはタイプではありません。
console.log(o); // [42、 "sample text"、object {x = 88}]
o [3] = 27; // javaScriptアレイは動的です。
console.log(o); // [42、 "sample text"、object {x = 88}、27]
o [5] = 99; // javaScriptアレイはまばらです。
console.log(o); // [42、 "sample text"、object {x = 88}、27、未定義、99]
上記の例からわかるように、不連続な配列の場合、JavaScriptは不足しているメンバーにアクセスするときに未定義に戻ります。配列が連続しているが、そのメンバーの1人が未定義の場合、配列にアクセスした結果は同じです。
コードコピーは次のとおりです。
var a = [42、 "サンプルテキスト"、{x:88}、27、未定義、99];
console.log(a); // [42、 "sample text"、object {x = 88}、27、未定義、99]
アレイは不連続で、メンバーが欠落しています。これは、配列が連続していると同じですが、未定義のメンバーがあります。どちらの場合も、配列コンテンツにアクセスした結果は同じです。しかし、主にアレイキーにアクセスする際に明らかになった2つの間にはまだいくつかの微妙な違いがあります。
コードコピーは次のとおりです。
console.log(4 in o); // false
console.log(4 in a); // true
これらの2つのケースでコンテンツにアクセスすることで得られた結果は同じですが、内部メカニズムは完全に異なります。配列が不連続な場合、特定のメンバーが欠落しているため、メンバーにアクセスすると、JavaScriptは定義されていません。配列が継続的である場合、すべてのメンバーが存在しますが、一部のメンバーの値は比較的特別であり、未定義です。
上記の例から、JavaScriptの配列の本質は、数字をキーとして単なるオブジェクトであり、通常のキー値とオブジェクトに違いはないこともわかります。実際、配列を読み書きするとき、JavaScriptはパラメーターを正の整数に変換しようとします。変換が成功した場合、配列操作が実行されます(アレイの長さプロパティを自動的に更新します)。障害が発生した場合、パラメーターは文字列に変換され、通常のオブジェクトに読み書きされます。もちろん、JavaScriptインタープリターの実装では、数字をキーとして使用する配列の機能に対して多くのパフォーマンスの最適化が行われます。したがって、実際に使用すると、オブジェクトのキーがすべて数字である場合、配列オブジェクトを直接使用すると、より効率的な結果が得られます。
Arrayを定義するプロセスでは、JavaScriptを使用すると、追加のコンマが表示され、2つのコンマの間に配列メンバーがいないことも許可されます。
コードコピーは次のとおりです。
var x = [1,2,3、]; //トレーリングコンマは省略されます。
console.log(x.length); // 3
var y = [1、、3]; //メンバーを見逃すことができます。
console.log(y); // [1、未定義、3]
console.log(y in y); // false
console.log(y.length); // 3
配列作成のために、JavaScriptは4つの方法をサポートしています。
1.リテラル(上記の例のブラケット式など)を使用して、配列オブジェクトを直接作成します。
2。array()コンストラクターを使用し、パラメーターを渡さないでください。この場合、[]と同じ効果で空の配列が作成されます。
3.配列()コンストラクターを使用して、配列の長さとして正の整数を渡します。この場合、JavaScriptは、対応するメモリスペースを予約してこの配列を保存します。アレイのキーが現時点では定義されていないこと、つまり配列にメンバーがいないことは注目に値します。その効果は[,,,]の効果と同等です
4。配列()コンストラクターを使用して、配列のメンバーを渡します。
実験:
コードコピーは次のとおりです。
var z = new Array(10); //前メモリを事前に挿入しますが、インデックスはまだ定義されていません。
console.log(z in z); // false
var m = new Array(42、33、99、 "test"、{k:99});
console.log(m); // [42、33、99、 "test"、object {k = 99}]
ECMAScript 5 Standardでは、array.isarray()を使用して、オブジェクトが配列であるかどうかを判断できます。
コードコピーは次のとおりです。
array.isarray([]); // true
array.isarray({}); // false