首页 > 开发 > JS > 正文

js foreach比for多出两个undefined

2017-09-05 13:02:21  来源:网友分享
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,为什么呢

解决方案

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有风险