JavaScript伪数组

我在刚开始学习 JS 的时候经常会遇到一个问题。比如在使用 document.getElementsByTagName(tagName)时选出的元素合集。这个元素合集具有 length 属性,也有索引,但是不具备数组的方法,这个就是伪数组。

那我们先说说什么是伪数组。一个伪数组应该具有以下条件:

  1. 具有 length 属性;
  2. 按索引方式储存数据;
  3. 具有数组的 push,pop 等方法;

常见的伪数组一般出现在 getElementByTagName()方法选出的元素和函数内部的 arguments 中。

说了这么多,那么我们应该怎么解决这个问题,如何将一个数组转换为一个标准的数组以使用数组方法?

方法一:

1
2
3
4
5
6
//for...in遍历
var fakeArr = document.getElementsByTagName("p");
var arr = [];
for (var p in fakeArr) {
arr.push(fakeArr[p]);
}

方法二:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//使用Array.prototype.call();
var fakeArr = document.getElementsByTagName("p");
var arr = [];
arr = Array.prototype.slice.call.call(fakeArr);
//**注意:IE8及以下会报错**应使用以下方法
function realArr(fakeArr) {
try {
return Array.prototype.slice.call(fakeArr);
} catch (e) {
var arr = [];
for (var i = 0; i < fakeArr.length; i++) {
arr[i] = fakeArr[i];
}
return arr;
}
}

以上是个人的一点拙见,有误请指出。

[越努力,越幸运!]