是什么语法(var i = 0,item; item = a [i ++];)

the*_*ero 1 javascript for-loop control-structure

重新引入Javascript中,语法

for (var i = 0, item; item = a[i++];)
Run Code Online (Sandbox Code Playgroud)

被解释为中间"项目"是对真实/虚假的条件测试.但是,我假设语法是(开始;条件测试;控制因子),每个段之间有分号.在这里,语法对我来说是不熟悉的(开始,条件测试;控制因素;),中间是逗号,最后是分号.它等同于

for (var i = 0; item; item = a[i++])
Run Code Online (Sandbox Code Playgroud)

如果是这样,为什么最后用逗号和分号写呢?

Bar*_*mar 6

在那个表达中,我们有

  • initialization = var i = 0, item- 这声明了两个变量,并分配其中一个变量.
  • condition = item = a[i++]- 执行赋值,并测试赋值的结果
  • control factor = nothing- i作为条件的一部分完成的增量,所以这里不需要任何东西

A for-loop基本上等同于以下内容:

initialization;
while (condition) {
    body;
    control factor;
}
Run Code Online (Sandbox Code Playgroud)

所以当我们从你的循环中替换时,我们得到:

var i = 0, item;
while (item = a[i++]) {
    // body that you didn't show
}
Run Code Online (Sandbox Code Playgroud)

赋值的值是赋值的值,因此条件是是否a[i]真实.不需要控制因子,因为a[i++]返回值a[i]并且同时递增i.

编写此循环的更典型方法是:

for (var i = 0; a[i]; i++) {
    var item = a[i];
    // body that you didn't show
}
Run Code Online (Sandbox Code Playgroud)

作者只是展示了如何将这些内容组合在一起.