javascript使用for/in复制对象属性的疑问?

  • 回答 (2)
  • 关注 (0)
  • 查看 (157)
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的属性值所组成的数组。这个过程是怎么发生的??

垃圾佬康哥垃圾佬康哥提问于
习惯痛苦看腾讯云笑笑就好回答于

for(i in o){}这里i 为o的key,也就是x,y,z

相当于 循环时a[0] = i,a[1] = i....

所以a为['x','y','z']

Amor陌a回答于

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。

扫码关注云+社区

领取腾讯云代金券