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

时间:2013-09-14 00:36:36

标签: javascript for-loop control-structure

Re-Introduction to Javascript中,语法

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

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

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

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

2 个答案:

答案 0 :(得分:6)

在那个表达中,我们有

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

for-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
}

作者刚才展示了如何将这些内容结合起来。

答案 1 :(得分:2)

格式没有改变。它只是声明var item。因此,它在start部分中声明了两个变量。真实性测试为item = a[i++];control factor无效。

for (;;) statement

是否有效声明。您无需在任何部分放置任何内容。

只要item = a[i++]评估为item

true的评估结果为true。真实性在作业的左侧完成。这取决于它的数据类型,但对于int,这可以是除0之外的任何值。