For循环中的省略条件

时间:2014-10-10 13:27:23

标签: javascript for-loop

有人可以帮助我理解以下代码的工作原理:

var someNumbers = [1,2,3,4,5];
var length = someNumbers.length;

for(var i=length; i--;) {
  console.log(i);
}

一旦i等同于0,这个for循环如何知道终止?负数怎么样?这不会导致无限循环吗?

3 个答案:

答案 0 :(得分:7)

在Javascript中,任何事情都可能是一个条件!在这种情况下,它是i--i--返回0后,循环将停止,因为0是假的。

缺少的部分是第三个表达式("最终表达式",请参阅for循环上的MDN页面),您通常会在其中找到增量/递减操作,但两者都在"条件"中组合。在这种情况下表达。

答案 1 :(得分:2)

这就是for循环工作的方式。 MDN涵盖a lot of detail中的for个循环,但请注意:

  

语法

     

for ([initialization]; [condition]; [final-expression]) statement

     

condition

     

在每次循环迭代之前要计算的表达式。如果此表达式的计算结果为true,则执行语句。此条件测试是可选的。如果省略,则条件始终计算为true。 如果表达式的计算结果为false,则执行将跳转到for构造后面的第一个表达式。

JavaScript中的

0falsy - 这意味着当评估为布尔表达式时,它的计算结果为false

您的for循环基本上做的是将length变量中存储的值分配给i变量,然后在每次循环迭代时从中减去1。最终,您的i变量将等于0.此处它将停止循环并转到for循环后的下一个语句。

如果您的length变量为负数,则会产生无限循环,但这不会发生在您提供的代码中。

答案 2 :(得分:0)

提到的减量方法是

 for(var i=length; i--;) {
    console.log(i);
     }

for (var i=length; i--;)&

之间是否存在性能差异?
 for (var i=length; i>0; i--)
    {
    console.log(i);
    }

那些不等同。第一个循环包含length-1 to 0,而第二个循环length to 1。 第一个循环很容易在无限循环中转动。如果长度的值小于0,则循环是无限的。使用第二种形式肯定更好。即使它更长,它更安全,更可读。