`我正在阅读'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
。
答案 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会在之前递增。