HTMLCollection是一个数组吗?

rya*_*dlf 20 html javascript

我知道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]';
}
Run Code Online (Sandbox Code Playgroud)

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

I H*_*azy 27

不,这是一个HTMLCollection,而不是一个Array.

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

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


rdo*_*iop 7

如果您正在考虑阵列转换,请参阅此帖子:

将HTMLCollection转换为数组的最有效方法.

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