为什么空数组在 javascript 的 "for in " 循环中被初始化而没有赋值?

Why empty array is getting initialized during the "for in " loop of javascript without assignment?

var a=[],i=0,o={x:1,y:2,z:3}
for(a[i++] in o);
console.log(a);

Mozilla 开发人员控制台中的输出:Array [ "x", "y" ]

我希望数组为空,因为循环从不迭代。但它是用 'x' 和 'y' 初始化的。

合理的解释是什么?

the loop never iterates

是的,确实如此。

for(key in o); 表示 每个键作为对象 o

key

因此循环使用 3 个值 "x""y""z".

迭代 3 次

然后是技巧,您可以使用语法 for(a[i++] in o);.

将这些值分配到数组中

for...in 语句迭代对象的所有可枚举属性,这些属性由字符串作为键。

for (variable in object) {
  statement
}

variable A different property name is assigned to the variable on each iteration.

object Object whose non-Symbol enumerable properties are iterated over.