您好,匿名用户
随意问技术百科期待您的加入

js foreach比for多出两个undefined

0 投票
var Ele = document.getElementsByTagName("iframe");
/* 	for(var i in Ele){
	alert(Ele[i].src);
	}  */
	for(var i=0;i<Ele.length;i++){
	alert(Ele[i].src);
	}

注释里运行的结果会多alert两次undefined,为什么呢

用户头像 提问 2012年 12月1日 @ Irelia 上等兵 (292 威望)
分享到:

1个回答

0 投票
 
最佳答案

foreach是取一个对象上的所有属性,而非遍历数组,例如如下代码:

var prop, obj = { a: "a", b: "b" };
obj[0] = "c";
for (prop in obj) {
    console.log(prop + "=" + obj[prop]);
}

输出是类似:0=c, a=a, b=b

楼主的foreach实际遍历的是一个NodeList对象而非纯数组,此对象上有一个item方法和一个length属性(由W3C DOM Spec - Interface NodeList定义),在代码循环中追加log可以看出:

var Ele = document.getElementsByTagName("iframe");
for (var i in Ele) {
    console.log(i + "=" + Ele[i]);
}

输出应该是类似:0=xxx,1=xxx...length=?,item=function() {...},后面两个一个是int一个是function,src属性自然为空

最后建议遍历数组还是尽量用for,foreach有风险

用户头像 回复 2012年 12月1日 @ Vladimir 上等兵 (275 威望)
选中 2012年 12月1日 @Irelia
提一个问题:

相关问题

+2 投票
1 回复 302 阅读
0 投票
1 回复 44 阅读
用户头像 提问 2012年 12月1日 @ Twisted Fate 上等兵 (184 威望)
0 投票
1 回复 34 阅读
0 投票
1 回复 61 阅读
用户头像 提问 2012年 12月1日 @ Trundle 上等兵 (301 威望)
0 投票
1 回复 40 阅读
用户头像 提问 2012年 12月1日 @ Nautilus 上等兵 (223 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...