定義
JavaScript 類數(shù)組對(duì)象的定義:
可以通過(guò)索引訪問(wèn)元素,并且擁有 length 屬性;
沒(méi)有數(shù)組的其他方法薯定,例如
push
,forEach
瞳购,indexOf
等话侄。
舉例說(shuō)明
var foo = {
0: 'Java',
1: 'Python',
2: 'Scala',
length: 3
}
轉(zhuǎn)換
如果類數(shù)組對(duì)象需要轉(zhuǎn)化為數(shù)組,可以用 Array.prototype.slice.call
var foo = {
0: 'Java',
1: 'Python',
2: 'Scala',
length: 3
}
var arr = Array.prototype.slice.call(foo);
其實(shí)一開(kāi)始看到這個(gè)表達(dá)式感覺(jué)比較費(fèi)解学赛,后來(lái)查了一些資料年堆,終于明白了,特別做一些說(shuō)明:
第一盏浇, foo
本來(lái)是沒(méi)有 slice
方法的嘀韧, Array.prototype.slice.call(foo)
這個(gè)表達(dá)式相當(dāng)于賦予 foo
這個(gè)對(duì)象 slice
方法。
第二缠捌, Array.prototype.slice.call(foo);
相當(dāng)于 Array.prototype.slice.call(foo, 0);
是把取一個(gè)數(shù)組(或者類數(shù)組)的子集,并作為一個(gè)數(shù)組返回译蒂。所以當(dāng)后面的作用對(duì)象是一個(gè)類數(shù)組時(shí)曼月,就會(huì)把這個(gè)類數(shù)組對(duì)象轉(zhuǎn)換為了一個(gè)新的數(shù)組。
所以柔昼,上面的一段代碼等價(jià)于
var foo = {
0: 'Java',
1: 'Python',
2: 'Scala',
length: 3
}
foo.slice = Array.prototype.slice;
foo.slice();
特性
類數(shù)組只有索引值和長(zhǎng)度哑芹,沒(méi)有數(shù)組的各種方法,所以如果要類數(shù)組調(diào)用數(shù)組的方法捕透,就需要使用 Array.prototype.method.call
來(lái)實(shí)現(xiàn)聪姿。
例如,如果遍歷一個(gè)類數(shù)組乙嘀,可以這樣實(shí)現(xiàn):
Array.prototype.forEach.call(foo, function(item){
console.log(item);
});
添加一個(gè)元素
Array.prototype.push.call(foo, 'PHP');
// foo = {0: "Java", 1: "Python", 2: "Scala 111", 3: "PHP", length: 4}