有人可以帮助我理解以下代码的工作原理:
var someNumbers = [1,2,3,4,5];
var length = someNumbers.length;
for(var i=length; i--;) {
console.log(i);
}
一旦i
等同于0
,这个for循环如何知道终止?负数怎么样?这不会导致无限循环吗?
答案 0 :(得分:7)
在Javascript中,任何事情都可能是一个条件!在这种情况下,它是i--
。 i--
返回0
后,循环将停止,因为0
是假的。
缺少的部分是第三个表达式("最终表达式",请参阅for
循环上的MDN页面),您通常会在其中找到增量/递减操作,但两者都在"条件"中组合。在这种情况下表达。
答案 1 :(得分:2)
这就是for
循环工作的方式。 MDN涵盖a lot of detail中的for
个循环,但请注意:
JavaScript中的语法
for ([initialization]; [condition]; [final-expression]) statement
condition
在每次循环迭代之前要计算的表达式。如果此表达式的计算结果为true,则执行语句。此条件测试是可选的。如果省略,则条件始终计算为true。 如果表达式的计算结果为false,则执行将跳转到for构造后面的第一个表达式。
0
为falsy - 这意味着当评估为布尔表达式时,它的计算结果为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,则循环是无限的。使用第二种形式肯定更好。即使它更长,它更安全,更可读。