即使数组长度为1,循环传递三次的简写?

时间:2012-08-22 21:06:16

标签: javascript html5

我在外部.js文件中有这个javascript函数:

function init() {
 var v = document.getElementsByTagName('video'),i;
 console.log(v.length);
  for (i in v) {
console.log("class:" + v[i].className + "id:" + v[i].id);
}
}
init();

专用html页面中的一个视频元素。这是脚本返回Chrome控制台的内容:

1     //  v.length
class:video1id:bigBunny    //first pass of for loop
class:undefinedid:undefined     //??
class:undefinedid:undefined     //??

为什么会这样?

2 个答案:

答案 0 :(得分:8)

NodeList(由getElementsByTagName返回)不仅包含元素,还包含两个附加属性:

length   (the amount of elements)
item     (to get an element, basically the same as using [i] notation)

你也在迭代它们并将它们视为元素。他们不是;他们没有班级也没有身份证。您应该使用数字for循环(for(var i = 0; i < v.length; i++)代替。这(与for in不同)显然不能包含这些属性。

答案 1 :(得分:1)

无论如何,你应该使用传统的for循环。

for(var i = 0; i < v.length; i++)
{
    console.log("class:" + v[i].className + "id:" + v[i].id);
}