【发布时间】:2014-10-26 19:56:27
【问题描述】:
`我正在阅读“JavaScript:权威指南”,我正在关注一个示例:
“您可以使用如下代码将所有对象属性的名称复制到一个数组中”
var o = {x:1, y:2, z:3};
var a = [], i = 0;
for(a[i++] in o) /* empty */;
我不明白,为什么最后一行真的做任何事情,没有说明。为什么会填满数组?
【问题讨论】:
-
两个 cmets:1) 如果它完成了它的预期,为什么还要麻烦? 2)每个维护者都会立即导致跳出窗口的这段代码......
-
因为
a[i++]是o的每个键所分配的。通常你会使用一个变量,但你使用的是数组成员。同样的操作。 -
我只是想了解它为什么有效。我无意按原样使用它。它看起来就像循环体是空的,它不应该填充数组,那么为什么它“做它打算做的事情”呢?
-
想想
for ... in是如何工作的。in左侧的变量在循环的每次迭代中分配对象的键。在 JavaScript 中将其作为对象属性引用是合法的,i的自动增量意味着在循环的每次迭代中,a的 不同 属性被分配了一个值。 -
...而 FWIW,在实际代码中,您只需使用
Object.keys(o),这几乎是相同的。
标签: javascript arrays for-in-loop