配列は、順番に並べられた値のセットですが、オブジェクトの属性名には順序がありません。基本的に、配列は検索キーとして数値を使用しますが、オブジェクトにはユーザー定義のプロパティ名があります。 JavaScript には実際の連想配列はありませんが、オブジェクトを使用して関連関数を実装できます
Array() は Object() の特別なタイプにすぎません。つまり、Array() インスタンスは基本的に、いくつかの機能を備えた Object() です。追加機能) インスタンス。配列はあらゆる種類の値を保存でき、いつでも更新または削除でき、オブジェクトに加えて配列のサイズも動的に調整されます。配列型は JavaScript で最も一般的に使用される型です。さらに、JavaScript の配列は、他のほとんどの言語の配列とはまったく異なります。この記事では、JavaScript における配列の配列型について紹介します
配列の作成
配列を作成するには、リテラル構文を使用する方法と Array() コンストラクターを使用する方法の 2 つがあります
配列リテラルを使用するのが、配列要素を角括弧で囲んでカンマで区切るだけです
var empty = []; //没有元素的数组 var primes = [2,3,5,7,11]; //有5个数值的数组
var misc = [1.1,true, "a"]; //3个不同类型的元素
var base = 1024; var table = [base,base+1,base+2,base+3];
var b = [ [1,{x:1,y:2}],[2,{x:3,y:4}] ];
var a = [[1, 2], [3, 4]];
コンストラクターを呼び出す方法は3つあります
【1】パラメータを付けずに空の配列を作成します
//该方法创建一个没有任何元素的空数组,等同于数组直接量[] var a = new Array();
var a = new Array(10); console.log(a);//[] console.log(a[0],a.length);//undefined 10
var a = new Array('10'); console.log(a);//['10'] console.log(a[0],a.length);//10 1
var a = new Array(1,2,3); console.log(a);//[1,2,3] console.log(a[0],a[1],a[2]);//1 2 3
var a1 = Array(); var a2 = Array(10); var a3 = Array(1,2,3); console.log(a1,a2,a3);//[] [] [1,2,3]
配列の本質
配列とは、配列された値の集合であり、本質的には特別なオブジェクトです
typeof [1, 2, 3] // "object"
var arr = ['a', 'b', 'c']; console.log(Object.keys(arr));// ["0", "1", "2"] var obj = { name1: 'a', name2: 'b', name3: 'c' };
o={}; //创建一个普通的对象 o[1]="one"; //用一个整数来索引它 //数值键名被自动转成字符串 var arr = ['a', 'b', 'c']; arr['0'] // 'a' arr[0] // 'a'
[注意] 単一の値を識別子 (identifier) として使用することはできません。したがって、配列メンバーは角かっこでのみ表すことができます
var a = []; //索引 a['1000'] = 'abc'; a[1000] // 'abc' //索引 a[1.00] = 6; a[1] // 6
var arr = [1, 2, 3]; arr[0];//1 arr.0;//SyntaxError
array Length
すべての配列には length プロパティがあり、これが通常の JavaScript オブジェクトと異なる点です。密 (つまり、非スパース) 配列の場合、長さ属性値は配列内の要素の数を表し、配列がスパース配列の場合、その値は配列内の最大インデックスより 1 大きくなります。値が要素の数より大きい場合、インデックス i が既存の配列の長さ以上の場合、長さ属性の値は i+1 に設定されます
【2】设置length属性为小于当前长度的非负整数n时,当前数组索引值大于等于n的元素将从中删除 【3】将数组的length属性值设置为大于其当前的长度。实际上这不会向数组中添加新的元素,它只是在数组尾部创建一个空的区域 如果人为设置length为不合法的值(即0——232-2范围以外的值),javascript会报错 由于数组本质上是对象,所以可以为数组添加属性,但是这不影响length属性的值 数组遍历 使用for循环遍历数组元素最常见的方法 当然,也可以使用while循环 但如果数组是稀疏数组时,使用for循环,就需要添加一些条件 还可以使用for/in循环处理稀疏数组。循环每次将一个可枚举的属性名(包括数组索引)赋值给循环变量。不存在的索引将不会遍历到 由于for/in循环能够枚举继承的属性名,如添加到Array.prototype中的方法。由于这个原因,在数组上不应该使用for/in循环,除非使用额外的检测方法来过滤不想要的属性 javascript规范允许for/in循环以不同的顺序遍历对象的属性。通常数组元素的遍历实现是升序的,但不能保证一定是这样的。特别地,如果数组同时拥有对象属性和数组元素,返回的属性名很可能是按照创建的顺序而非数值的大小顺序。如果算法依赖于遍历的顺序,那么最好不要使用for/in而用常规的for循环 有三个常见的类数组对象: 【1】arguments对象 【2】DOM方法(如document.getElementsByTagName()方法)返回的对象 【3】字符串 [注意]字符串是不可变值,故当把它们作为数组看待时,它们是只读的。如push()、sort()、reverse()、splice()等数组方法会修改数组,它们在字符串上是无效的,且会报错 数组的slice方法将类数组对象变成真正的数组 javascript数组方法是特意定义为通用的,因此它们不仅应用在真正的数组而且在类数组对象上都能正确工作。在ECMAScript5中,所有的数组方法都是通用的。在ECMAScript3中,除了toString()和toLocaleString()以外的所有方法也是通用的var arr = ['a', 'b'];
arr.length // 2
arr[2] = 'c';
arr.length // 3
arr[9] = 'd';
arr.length // 10
arr[1000] = 'e';
arr.length // 1001
a=[1,2,3,4,5]; //从5个元素的数组开始
a.length = 3; //现在a为[1,2,3]
a.length = 0; //删除所有的元素。a为[]
a.length = 5; //长度为5,但是没有元素,就像new
var a = ['a'];
a.length = 3;
console.log(a[1]);//undefined
console.log(1 in a);//false
// 设置负值
[].length = -1// RangeError: Invalid array length
// 数组元素个数大于等于2的32次方
[].length = Math.pow(2,32)// RangeError: Invalid array length
// 设置字符串
[].length = 'abc'// RangeError: Invalid array length
var a = [];
a['p'] = 'abc';
console.log(a.length);// 0
a[2.1] = 'abc';
console.log(a.length);// 0
var a = [1, 2, 3];
for(var i = 0; i < a.length; i++) {
console.log(a[i]);
}
var a = [1, 2, 3];
var i = 0;
while (i < a.length) {
console.log(a[i]);
i++;
}
var l = a.length;
while (l--) {
console.log(a[l]);
}
//跳过不存在的元素
var a = [1,,,2];
for(var i = 0; i < a.length; i++){
if(!(i in a)) continue;
console.log(a[i]);
}
var a = [1,,,2];
for(var i in a){
console.log(a[i]);
}
var a = [1,,,2];
a.b = 'b';
for(var i in a){
console.log(a[i]);//1 2 'b'
}
//跳过不是非负整数的i
var a = [1,,,2];
a.b = 'b';
for(var i in a){
if(String(Math.floor(Math.abs(Number(i)))) !== i) continue;
console.log(a[i]);//1 2
}
// arguments对象
function args() { return arguments }
var arrayLike = args('a', 'b');
arrayLike[0] // 'a'
arrayLike.length // 2
arrayLike instanceof Array // false
// DOM元素
var elts = document.getElementsByTagName('h3');
elts.length // 3
elts instanceof Array // false
// 字符串
'abc'[1] // 'b'
'abc'.length // 3
'abc' instanceof Array // false
var str = 'abc';
Array.prototype.forEach.call(str, function(chr) {
console.log(chr);//a b c
});
Array.prototype.splice.call(str,1);
console.log(str);//TypeError: Cannot delete property '2' of [object String]
var arr = Array.prototype.slice.call(arrayLike);
var a = {'0':'a','1':'b','2':'c',length:3};
Array.prototype.join.call(a,'+');//'a+b+c'
Array.prototype.slice.call(a,0);//['a','b','c']
Array.prototype.map.call(a,function(x){return x.toUpperCase();});//['A','B','C']
以上がJavaScript での配列の作成と使用に関するディスカッションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。