在Re-Introduction to Javascript中,语法
for (var i = 0, item; item = a[i++];)
被解释为中间的“项目”是对真实性/虚假性的条件测试。但是,我假设语法是(开始;条件测试;控制因子),每个段之间有分号。在这里,我不熟悉这种形式的语法(开始,条件测试;控制因子;),中间是逗号,最后是分号。是否相当于
for (var i = 0; item; item = a[i++])
?
如果是这样,为什么要在末尾使用逗号和分号?
在Re-Introduction to Javascript中,语法
for (var i = 0, item; item = a[i++];)
被解释为中间的“项目”是对真实性/虚假性的条件测试。但是,我假设语法是(开始;条件测试;控制因子),每个段之间有分号。在这里,我不熟悉这种形式的语法(开始,条件测试;控制因子;),中间是逗号,最后是分号。是否相当于
for (var i = 0; item; item = a[i++])
?
如果是这样,为什么要在末尾使用逗号和分号?
在那个表达式中,我们有
var i = 0, item-- 这声明了两个变量,并分配其中一个。item = a[i++]-- 这执行一个赋值,并测试赋值的结果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
}
作者只是展示了如何将其中的许多部分结合起来。
格式没有改变。它只是声明var item. 因此,它在该start部分中声明了两个变量。真实性测试是item = a[i++];并且control factor什么都不是。
for (;;) statement
是一个有效的 for 语句。您不必在任何部分中添加任何内容。
item = a[i++]只要item评估为,评估为 true true。真实性在作业的左侧完成。这将取决于它的数据类型,但对于 int,这可以是除0例如之外的任何值。