1

Re-Introduction to Javascript中,语法

for (var i = 0, item; item = a[i++];)

被解释为中间的“项目”是对真实性/虚假性的条件测试。但是,我假设语法是(开始;条件测试;控制因子),每个段之间有分号。在这里,我不熟悉这种形式的语法(开始,条件测试;控制因子;),中间是逗号,最后是分号。是否相当于

for (var i = 0; item; item = a[i++])

?

如果是这样,为什么要在末尾使用逗号和分号?

4

2 回答 2

6

在那个表达式中,我们有

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

Afor-loop基本上等价于以下内容:

initialization;
while (condition) {
    body;
    control factor;
}

因此,当我们从您的循环中替换时,我们得到:

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

赋值的值是被赋值的值,所以条件是是否a[i]为真。不需要控制因子,因为返回a[i++]的值a[i]同时增加i

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

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

作者只是展示了如何将其中的许多部分结合起来。

于 2013-09-14T00:41:00.587 回答
2

格式没有改变。它只是声明var item. 因此,它在该start部分中声明了两个变量。真实性测试是item = a[i++];并且control factor什么都不是。

for (;;) statement

是一个有效的 for 语句。您不必在任何部分中添加任何内容。

item = a[i++]只要item评估为,评估为 true true。真实性在作业的左侧完成。这将取决于它的数据类型,但对于 int,这可以是除0例如之外的任何值。

于 2013-09-14T00:39:31.667 回答