“for ... in ...”构造的奇怪行为

时间:2015-12-17 14:33:09

标签: javascript html 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!');

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

0
1
2
3
item
namedItem
length
finish!

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

3 个答案:

答案 0 :(得分:5)

document.getElementById('myDiv').getElementsByTagName('input')不会返回真正的数组。它是一个array like对象。因此,forEachmap等函数不存在。 for ... in ...有一种奇怪的行为。

您可以使用slice将其转换为真实数组:

var elements = Array.prototype.slice.call(document.getElementById('myDiv').getElementsByTagName('input'));

答案 1 :(得分:0)

http://www.w3schools.com/jsref/coll_form_elements.asp 如此链接所示,您将输出输入元素的属性和方法。

答案 2 :(得分:-1)

代码中的

elements不是javascript数组,它是一个类似数组的对象。它实际上是HTMLCollection,它具有一些额外的可枚举属性。

  

for ... in语句迭代对象的可枚举属性。

请参阅for...inHTMLCollection