javascript 里的for in 小问题。

2025-05-20 03:56:20
推荐回答(5个)
回答(1):

JS就这么规定的。
主要是因为getElementsByTagName反回的是数组
数组有length属性。但是在定义obj时候它并不知道自己是数组类型的(弱类型特点)所以这个时候你直接去obj.length 你会发现他的返回值是“未定义” 这时候就需要getElementsByTagName去告诉obj“你是个数组!!!”于是返回一个数组特有的属性length给obj.
汗。这帮人小看楼主了。
to 2 想到这点的应该不会不知道for(var i=0;ito 1 for(var i in obj)这个东西应该是遍历obj中的[i],而不是单指属性吧。

回答(2):

我用火狐,弹出的不止是length,还有item()和namedItem().
var obj = document.getElementsByTagName("span");
for(var i=0,len=obj.length;i alert(obj.item(i));
}
这个东西getElementsByTagName("")返回的不是数组,返回的是包含一个或多个的元素的 "NodeList“ ; item(),和namedItem()是2个查找 NodeList 用的 2个方法。
上面已经举例item()用法了,
namedItem()是用name查找,如果你的标签有name的话。
而且NodeList是动态的。也就是说
length这个值是即时改变的。
var obj = document.getElementsByTagName("span");
for(var i=0;i var newNode = document.createElement('span');
document.body.appendChild(newNode);
}
这是个死循环

回答(3):

你的原意可能是想使用 for in 语句来访问 document.getElementsByTagName("span") 集合,这种方法在VBScript语法中是正确的,但是如果是在JS里,迭代集合的成员需要使用enumerator对象,这是JS手册中关于for in的解释,你可以使用for语句通过集合索引来访问集合中的对象,或使用for in语句和enumerator对象来访问集合对象.
关于enumerator对象,请参考JS手册enumerator对象一节.

回答(4):

For...In 声明用于遍历数组或者对象的属性(对数组或者对象的属性进行循环操作)。
可以用

for(var i=0;i}替代

回答(5):

for(var i in obj)
这个语句在javascript中就是循环obj的所有属性。
并不是其他语言中循环列表用的。
理解原理就好了