类数组就是有length属性的对象。它可以像数组一样,但无法使用数组的函数,如push.

var arr = {
    0: 'a',
    1: 'b',
    2: 'c',
    length: 3
};
console.log(arr[0]);// a
console.log(arr.length);// 3
console.log(arr instanceof Array);// false
arr.push('d');// 报错

典型的类似数组的对象是函数的arguments对象,以及大多数DOM元素集,还有字符串。

function args() { return arguments }
// 函数的参数
var arrayLike = args('a', 'b');

console.log(arrayLike[0]); // 'a'
console.log(arrayLike.length); // 2
console.log(arrayLike instanceof Array); // false
arrayLike.push('c');// 报错

// DOM元素集
var elts = document.getElementsByTagName('h3');
elts.length // 3
elts instanceof Array // false

// 字符串
'abc'[1] // 'b'
'abc'.length // 3
'abc' instanceof Array // false

数组的slice方法将类似数组的对象,变成真正的数组。仅以字符串为例

var str = 'abc';
var arr = Array.prototype.slice.call(str);
console.log(arr[0]); // 'a'
console.log(arr.length); // 3
console.log(arr instanceof Array); // true
console.log(arr.push('d'));// 4

类数组的遍历可以使用for循环,也可以使用数组的foreach

for (var i = 0; i < arr.length; i++) {
    console.log(i + '. ' + arr[i]);
}

Array.prototype.forEach.call(arr, function(elem, i) {
    console.log(i + '. ' + elem);
});

唯见长江天际流
827 声望11 粉丝

黄鹤楼送孟浩然之广陵


下一篇 »
Object对象