22

我知道 HTMLCollection 实际上不是一个数组,否则它将被定义为一个数组。我使用称为 isArray() 的帮助函数来检测对象是否为数组。我到处使用这个小助手,并且在检查 htmlCollection 时,我一直在运行返回 false 的问题。

var isArray: function(obj) {
    var type = Function.prototype.call.bind( Object.prototype.toString );
    return type(obj) === '[object Array]' || type(obj) === '[object HTMLCollection]';
}

在这个辅助函数中检查 htmlCollection 类型并假设它与数组相同,会不会出错?是什么让它与众不同?除了它的 html 元素而不是 javascript 对象。

4

2 回答 2

28

不,它是一个HTMLCollection,不是一个Array

它具有类似数组的特性,如数值属性和一个.length属性,但它不继承自Array.prototype. 因此它没有标准Array方法,因此应该被视为不同。

另一个显着的区别是HTMLCollection“实时”集合,这意味着它会随着 DOM 的更新而更新。如果您从 DOM 中删除其节点之一,它将自动从 DOM 中删除HTMLCollection

于 2012-10-07T15:33:19.910 回答
7

如果您正在考虑进行数组转换,请参阅这篇文章:

将 HTMLCollection 转换为 Array 的最有效方法

他们讨论了一些方法,所选答案中的解决方案也适用于我经历过的情况。

于 2013-04-24T22:07:30.650 回答