使用for / in将对象属性复制到数组中

时间:2014-03-02 20:48:40

标签: javascript arrays for-in-loop

`我正在阅读'JavaScript:权威指南',我会挂上一个例子:

“您可以使用以下代码将所有对象属性的名称复制到数组中”

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

“按照上面的代码使用此行枚举数组索引0,1和2”

for(i in a) console.log(i);

有人可以向我解释一下,我是五个第一个for/in循环是如何工作的吗?我觉得a[i++]在第一次循环时评估为1,而不是0

2 个答案:

答案 0 :(得分:3)

  

有人可以向我解释一下,我是五个第一个for / in循环是如何工作的吗?

for-in loop确实允许在in之前的任何左侧表达式(即,您可能分配给它的东西),而不仅仅是纯变量。所以

for(a[i++] in {x:1, y:2, z:3})

相同
a[i++] = "x";
a[i++] = "y";
a[i++] = "z";
  

在我看来a[i++]第一次在循环中评估为1,而不是0。

i++是一个后缀表达式,所以不 - 它会产生值0(之前i之前的值),然后递增它。有关详细信息,请参阅++someVariable Vs. someVariable++ in Javascript

答案 1 :(得分:1)

您对变量i递增的时间感到困惑。 只有i

,您才能期望1评估为for(a[++i] in o) /* empty */;

它被称为post / pre increment。 Post会在你的指令后递增,而pre会在之前递增。