var o = {x:1,y:2,z:3};var a = [],i = 0;for(a[i++] in o){}console.log(a)//['x','y','z'];在看权威教程的时候,看到这个代码,有些疑问,声明的空数组a,在for/in循环中a[i++]应该是undefined啊,为何循环出来的是对象o的属性值所组成的数组。这个过程是怎么发生的??
1 回答
慕哥6287543
TA贡献1831条经验 获得超10个赞
for(a[i++] in o)
每次循环的时候,把对象o
的属性赋值给a[i]
,然后i++
;
所以
第一次遍历的时候,遍历出o
的属性"x"
,然后把"x"
赋值给a[i]
,此时i
等于0
,所以是a[0] = "x"
,然后i++
,此时i
变成1
,a
变成["x"]
;
第二次遍历的时候,遍历出o
的属性"y"
,然后把"y"
赋值给a[i]
,此时i
等于1
,所以是a[1] = "y"
,然后i++
,此时i
变成2
,a
变成["x", "y"]
;
第三次遍历的时候,遍历出o
的属性"z"
,然后把"z"
赋值给a[i]
,此时i
等于2
,所以是a[2] = "z"
,然后i++
,此时i
变成3
,a
变成["x", "y", "z"]
;
遍历结束,a
的值变成['x','y','z']
,i
的值变成3
。
添加回答
举报
0/150
提交
取消