"for ... in ..."构造的奇怪行为

Rod*_*igo -2 html javascript for-loop

我有一个带4个复选框的div.然后我运行以下javascript:

var elements = document.getElementById('myDiv').getElementsByTagName('input');
alert(elements.length); // output: 4
for (element in elements) {
    alert(element);
}
alert('finish!');
Run Code Online (Sandbox Code Playgroud)

在4之后,我按顺序收到以下警报:

0
1
2
3
item
namedItem
length
finish!
Run Code Online (Sandbox Code Playgroud)

从0到3的数字是元素的索引.但是'item','namedItem'和'length'在这里意味着什么?

Mag*_*gus 5

document.getElementById('myDiv').getElementsByTagName('input')不返回真正的数组.这是一个array like对象.所以函数喜欢forEachmap不存在.并for ... in ...得到了一个奇怪的行为.

您可以将其转换为真正的数组slice:

var elements = Array.prototype.slice.call(document.getElementById('myDiv').getElementsByTagName('input'));
Run Code Online (Sandbox Code Playgroud)