HTMLCollection是一个数组吗?

时间:2012-10-07 15:32:35

标签: javascript html

我知道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对象。

2 个答案:

答案 0 :(得分:26)

不,这是HTMLCollection,而不是Array

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

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

答案 1 :(得分:7)

如果您正在考虑阵列转换,请参阅这篇文章:

Most efficient way to convert an HTMLCollection to an Array

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