首页 > js中的for 和for in 遍历的区别?

js中的for 和for in 遍历的区别?

<script type="text/javascript">
var x
var mycars = new Array()
mycars[0] = "Saab"
mycars[2] = "Volvo"
mycars[4] = "BMW"

<!--for (y in mycars)
{

document.write(mycars[y] + "<br />")
}
alert(mycars.length);
-->
for(var i=0;i<mycars.length;i++){
 document.write(mycars[i] + "<br />")
}
</script>

为什么for in输出的话没有undefined
而for会输出undefined值呢?
他们在实际应用中有哪些区别?
for:
Saab
undefined
Volvo
undefined
BMW
for in:
Saab
Volvo
BMW

for in 语法遍历一个对象的可枚举属性
for 按设置的条件循环执行包含的语句块

var mycars = new Array()
mycars[0] = "Saab"
mycars[2] = "Volvo"
mycars[4] = "BMW"

对于数组对象mycars来说其长度为5,有“1”,“2”,“4”这3个可枚举属性
所以

for (y in mycars){
console.log(mycars[y]);
}

可输出Saab,Volvo,BMW

而当

for (y=0;y<mycars.length;y++){
    console.log(mycars[y]);
}

mycars.length值为5,y值分别为0,1,2,3,4
mycars[y]相当于在执行mycars[String(y)]
1,3下标处没有定义值,为undefined
输出结果为Saab,undefind,Volvo,undefined,BMW


for in 一般是来遍历对象的

如果你不把数组当成一个对象去遍历,那就用for

可以遍历所有的索引


答案就是,本质上你可以把数组看成下面的样子:

var mycars = {
    "0": "Saab",
    "2": "Volvo",
    "4": "BMW"
};

下面是原答案,可以不用看了!

因为for in实际上是去遍历对象的可枚举属性,它会把你给它的操作数当成对象,管你是不是数组呢。

对于数组这个特殊对象,通常它的可枚举属性就是'0'、'1'、'2'...这些字符串。

而你代码中的那个数组,只定义了0、2、4这三个属性,当然for in只能遍历出这三个值。

而你的for循环,通过对i进行自增运算,强制去取了从0到4的所有属性,所以1和3那两个没有定义的属性(undefined)就被打印出来了。

所以,关键点就是:

数组就是对象而已!


for in 是用来遍历对象属性的。
数组也是一个对象,并且是一个内建的Array对象实例。 for in 遍历非自定义的对象时,只能获取到指定的属性。对于你提供的数组就是0, 2, 4。
可以对于普通的循环,还会访问不存在的属性,1和3,所以会有undefined.

对于Array内部的实现不太了解,仅仅是从对象的属性访问角度来分析这个问题。仅供参考


for一般对数组使用,for..in一般是对json对象使用
你在for输出undefined因为循环的判断条件写错了,应该是i<mycars.length-1


都差不多,按字面的意思,for就是循环,for in 就是在(a1,a2,a3...)里面循环


用得最多的难道不是forEach?

【热门文章】
【热门文章】