for循环如何确定何时打破循环

时间:2014-10-10 21:27:04

标签: javascript arrays for-loop

我遇到了一种我不常见或常用的不同类型的for循环。我试图找出它但在这个过程中更加困惑。它没有第三个参数或者甚至是一种打破循环的检查方法。它迭代一个数组并打印它的值。实际上它遇到了“未定义的”#39;某个索引的价值,但我不会告诉它什么时候会遇到undefined.please帮我打破这个难题......



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

5 个答案:

答案 0 :(得分:2)

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

如果任何数组元素为undefined或任何其他值为false的布尔值,则循环将终止于该元素。

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

答案 1 :(得分:2)

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

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

var a=[1,2,3,4,5,6,7,8,9];
var value;

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

但改为简洁。

第三个语句(递增/递减)是可选的,作者(再次出于绝对简洁)决定使用后缀增量(i++将返回i然后递增它,而++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,这是一个假值并将导致循环终止。

答案 2 :(得分:2)

有几点需要注意:

  1. undefined是一个“虚假”(非真实)值
  2. 当条件变为非真实时,循环终止
  3. a[i](或a[i++])分配给value,返回value
  4. 因此,当i == 9a[i++] == undefinedvalue == undefined时,循环终止。

答案 3 :(得分:1)

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

查看For Statement的规范:

  
      
  1. 重复
      一个。如果第一个表达式存在,那么
      一世。让testExprRef成为评估第一个表达式的结果   II。如果ToBoolean(GetValue(testExprRef))为 false ,则返回(normal,V,empty)。
  2.   

答案 4 :(得分:1)

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

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

此处发生自动类型转换,以便评估a[i++]的值。如果a[i++]为真,则循环继续,否则停止。