伪数组(类数组):
无法直接调用数组方法或期望length属性有什么特殊的行为,但仍可以对真正数组遍历方法来遍历它们。
典型的是函数的argument参数,还有像调用getElementsByTagName,document.childNodes之类的,它们都回NodeList对象都属于伪数组。可以使用Array.prototype.slice.call(fakeArray)将数组转化为真正的Array对象。
在 JavaScript 中, 函数中的隐藏变量 arguments 和用 getElementsByTagName 获得的元素集合(NodeList)都不是真正的数组,不能使用 push 等方法,在有这种需要的时候只能先转换为真正的数组。
对于 arguments,可以使用 Array.prototype.slice.call(arguments); 来达到转换的目的,但对于 NodeList 则不行了,其在 IE8 及以下将会报错,只能说其 JS 引擎有所限制。
因此,如果需要把 NodeList 转换为真正的数组,则需要做下兼容处理。
1
2
3
4
5
6
7
8
9
10
11
|
function
makeArray(c) {
try
{
return
Array.prototype.slice.call(c);
}
catch
(e) {
var
ret = [], i = 0, len = c.length;
for
(; i < len; i++) {
ret[i] = (c[i]);
}
return
ret;
}
}
以下分别测试以上三种伪数组:
|