我知道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对象。
答案 0 :(得分:26)
不,这是HTMLCollection
,而不是Array
。
它具有类似数组的特性,如数字属性和.length
属性,但它不会从Array.prototype
继承。因此,它没有标准Array
方法,所以应该被视为不同。
另一个重要区别是HTMLCollection
是一个“实时”集合,这意味着它会随着DOM更新而更新。如果从DOM中删除其中一个节点,它将自动从HTMLCollection
中删除。
答案 1 :(得分:7)
如果您正在考虑阵列转换,请参阅这篇文章:
Most efficient way to convert an HTMLCollection to an Array。
他们讨论了一些方法,所选答案中的解决方案也适用于我所经历的情况。