为什么无限循环不抛出错误



这是我的代码片段

const loopFn = function(num) {
for(let a = 0; a < num || 10; a++) { 
console.log(a)
}
}
let b = loopFn(8)
console.log(b)

我知道正确的写法是a < (num || 10),我只是好奇为什么它会导致无限循环而不是报告错误。

你的意思是…

const count = num || 10;
for(let a = 0; a < count; a++) { 
console.log(a)
}

但是你实际上是在说当a小于8或者10等于true

语言/执行引擎不会将其报告为错误,因为无限循环本身没有固有的问题。

根据用例,无限循环是有帮助的。例如,在用于处理队列中的作业的守护进程脚本中。

for循环的第二部分是condition;布尔值的结果告诉for循环是停止还是继续;当你输入10时,它将被计算为true;因此for循环永远不会结束;就好像你在写

if (10) {
// do something
}

如果您没有将逻辑包装在括号内,那么它将像这样分割

检查a<num是否为真,或者10是否为真。

它取10为真表达式,因为它是一个非零数。所以每次循环得到第二个表达式为真,以此类推

如果你把条件括起来,它会像这样检查

a<numa<10

当它匹配任何一个表达式false时,它将停止。

它只是使用括号。

原因是JavaScript(或任何语言)中的运算符优先级。当您将表达式a<num||10传递给for循环的中断条件时,它首先计算a<num部分,然后计算||10部分。a<num将为您提供一个真/假值,10将为您提供10(真值),因此a<num||10基本上会检查a<num10中的一个是否为真值,这是真的。因此,无限循环。
更多关于操作符优先级的信息:MDN文档

for循环的条件是:

a < num || 10

如果有<Num为真,或者10为真,循环继续。>

在浏览器控制台中尝试一下,您将看到,10总是为真。如果(10)警报("true"

如果你想在a不是<10、试试这个:

for(let a = 0; a < num || a < 10; a++) 

相关内容

  • 没有找到相关文章

最新更新