yxf*_*xmx 5 javascript arrays for-in-loop
"我正在阅读'JavaScript:权威指南',我会挂上一个例子:
"您可以使用以下代码将所有对象属性的名称复制到数组中"
var o = {x:1, y:2, z:3};
var a = [], i = 0;
for(a[i++] in o) /* empty */;
Run Code Online (Sandbox Code Playgroud)
我不明白,为什么最后一行真的做了什么,没有说明.为什么它填满阵列?
这是有效的,因为for循环将值分配给o左边的变量in.
通常这将是一个用于某些功能的新变量.例如for(var a in o){/* do something with a */}
在这种情况下其分配到a[i++]其中i++通过每次1增加
值得指出的是,;在for(a[i++] in o) /* empty */;
此关闭每一次迭代的重要性for.没有它,下一行/循环(无论它可能是什么)将被重复.
哇,我真的很惊讶这段代码的工作原理!我只想说,我不建议使用它,并且希望这种a[i++]诡计出现在古老的 C 中,而不是 Javascript 中:)
至于为什么它有效,这与语言的语法有关。for 循环的语法是:
for ( LeftHandSideExpression in Expression ) Statement
Run Code Online (Sandbox Code Playgroud)
LeftHandSideExpression是您可以使用运算符分配的任何内容=。在 for 循环中,通常我们只使用变量标识符for(k in o),但由于arr[i]也是有效的 LHS 表达式(您可以这样做arr[i] =),我们也可以编写for(arr[i] in o)。
最后,你的循环做了类似的事情
var a=[], i=0;
a[i++] = "x";
a[i++] = "y";
a[i++] = "z";
// in the end, a should be ["x", "y", "z"]
// and i should be 3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |