【发布时间】:2012-10-07 15:32:34
【问题描述】:
我知道 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 对象。
【问题讨论】:
-
请注意,
HTMLCollection(或实际上任何类似数组的对象)可以使用Array.prototype.slice.call(obj)转换为真正的数组。 -
@lonesomeday:IE8 及更低版本除外。 :(
-
ryandlf:您应该重新考虑
isArray函数的设计,这样您就不会在每次调用isArray时都创建type函数。与只做一次然后调用它相比,这是一个相当昂贵的操作。 -
你应该用原生方式来检查它是否是一个数组:
Array.isArray(youVariable)
标签: javascript html