在我的JSFiddle中,我只是尝试遍历一系列元素。日志语句证明,该数组为非空。但是,forEach
给我的电话给了我(不是那么有用)“未捕获TypeError
:undefined
不是函数”错误。
我一定在做些愚蠢的事。我究竟做错了什么?
我的代码:
var arr = document.getElementsByClassName('myClass');
console.log(arr);
console.log(arr[0]);
arr.forEach(function(v, i, a) {
console.log(v);
});
.myClass {
background-color: #FF0000;
}
<div class="myClass">Hello</div>
有点
—
2014年
[1,2,3].forEach(function(v,i,a) { console.log(v); });
好。在我的示例中,此数组与数组有什么区别?
你不要有一个数组在你的榜样。是什么使您认为它是数组?
—
伊恩
@Jer:
—
2014年
arr instanceof Array
将导致false
无法使用Array
对象的任何原型方法,例如Array.prototype.forEach()。arr
是一个HTMLCollection和一个类似object的数组(但不继承自或实例化Array
)。因此,您的标准for
循环将可以正常工作,因为它仅循环访问对象的索引,而不是的原型Array
。
@Jer-您应该研究内置对象和宿主对象之间的区别。前者符合ECMA-262,后者仅符合主人的意愿。DOM具有许多对象,这些对象允许通过索引访问成员(document.images,document.forms,form.elements,select.options等),这些对象主要基于NodeList接口。
—
RobG 2014年
arr
不是数组,而是一个HTMLCollection
。它没有与数组相同的方法。developer.mozilla.org/zh-CN/docs/Web/API/…。这甚至是关于它的SO帖子:stackoverflow.com/questions/13433799/…–