这个for循环如何决定何时中断循环

how this for loop determines when to break the loop

本文关键字:循环 决定 何时 中断 for 何决定 这个      更新时间:2023-09-26

我遇到了一种不同类型的for循环,我不常看到或使用它。我试图弄清楚,但在这个过程中变得更加困惑。它没有第三个参数,甚至没有检查方法来中断循环。在这里,它迭代一个数组并打印它的值。事实上,它遇到了某个索引的"未定义"值,但我并没有告诉它在遇到未定义时要打破。请帮助我打破这里的谜题。。。

(function () {
    var a = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    for (var i = 0, value; value = a[i++];) {
        document.write(value + '</br>');
    }
})();

在javascript中,当您访问超出数组长度的数组元素时,不会得到范围检查错误,返回值为undefined,当被视为布尔值时,它对应于false,因此当到达数组末尾时循环终止。

如果数组元素中的任何一个是undefined,或者任何其他值变为false为布尔值,则循环将在该元素上终止。

javascript中的赋值运算符返回左侧的值,因此表达式value = a[i++]用于返回a[i]的值,并按该顺序递增i-。如果该值转换为false作为布尔值,则循环终止。

for循环的所有参数都是可选的。

for循环中的第一条语句只是一个变量声明,因此您可以定义多个变量。作者本可以写:

var a=[1,2,3,4,5,6,7,8,9];
var value;
for(var i = 0; value = a[i++];)

而是力求简洁。

第三条语句(递增/递减)是可选的,作者(再次为了绝对简洁)决定使用后缀递增(i++将返回i THEN递增,而++i将递增THEN返回递增的值)。

他们也可以这样写:

(function () {
    var a = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    var value;
    var i = 0;
    for ( ; value = a[i++]; ) {
        document.write(value + '</br>');
    }
})();

最后,作为最终评估条件的a[a.length+1]返回undefined,这是一个错误值,将导致循环终止。

需要注意的几件事:

  1. undefined是一个"假"(非真)值
  2. 循环在其条件变为非真时终止
  3. a[i](或a[i++])分配给value将返回value

所以,当i == 9a[i++] == undefined,所以value == undefined时,所以循环终止。

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

for的第二部分被评估为每个迭代的条件。

这里进行自动类型转换,从而评估CCD_ 21的值。如果a[i++]为真,则循环继续,否则循环停止。

For循环重复,直到第一个;之后的条件为true。在您的情况下,数组中的最后一个元素a[i++]最终将变为falsy(ToBoolean(undefined))。一旦发生,循环停止。

看看for Statement:的规范

  1. 重复
     nbsp nbsp;a.如果存在第一个表达式,则
     nbsp nbsp nbsp nbsp i.让testExprRef是评估第一个表达式的结果
     nbsp nbsp nbsp nbsp;ii。如果ToBoolean(GetValue(testExprRef))为false,则返回(normal,V,empty)