鍍金池/ 問答/HTML/ for/in復(fù)制對象屬性的疑問

for/in復(fù)制對象屬性的疑問

clipboard.png

var o = {x:1,y:2,z:3};
var a = [],i = 0;
for(a[i++] in o){}
console.log(a)//['x','y','z'];
在看權(quán)威教程的時候,看到這個代碼,有些疑問,聲明的空數(shù)組a,在for/in循環(huán)中a[i++]應(yīng)該是undefined啊,為何循環(huán)出來的是對象o的屬性值所組成的數(shù)組。這個過程是怎么發(fā)生的??

回答
編輯回答
病癮

for(a[i++] in o)每次循環(huán)的時候,把對象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變成3a變成["x", "y", "z"];
遍歷結(jié)束,a的值變成['x','y','z']i的值變成3。

2018年7月18日 20:03
編輯回答
青檸

for(i in o){}這里i 為o的key,也就是x,y,z
相當(dāng)于 循環(huán)時a[0] = i,a[1] = i....
所以a為['x','y','z']

2017年8月25日 18:01
編輯回答
負(fù)我心

for-in語句遍歷 o 屬性的時候,每次遍歷到1個屬性會間接把該屬性鍵名賦值給a[i](隨后i++)。所以最后 a 會打印出 o 的所有鍵名。

2018年7月4日 22:47