類數組就是有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方法將相似數組的對象,變成真正的數組。僅以字符串爲例prototype
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循環,也可使用數組的foreachcode
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); });