这是我的代码片段
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 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 循环条件是:
a < num || 10
如果 a < num 为真,或者 10 为真,则循环继续。
在您的浏览器控制台中尝试,您会发现,10 总是为真。 if(10) alert("true")
如果您希望循环在 a 不小于 10 时结束,请尝试以下操作:
for(let a = 0; a < num || a < 10; a++)
a < num || a < 10
不等于 a < (num || 10)
。考虑 num = 8
。 - Raeisi10
时,它将被评估为true; 因此,for循环永远不会结束; 就好像你写的是。if (10) {
// do something
}
如果您没有将逻辑包含在括号中,那么它将像这样分割
它要么检查a<num
为真,要么检查10
为真表达式。
它将10作为真表达式,因为它是一个非零数字。所以每次循环都会得到第二个表达式为真等等。
如果您将条件包装起来,则会像这样检查
要么a<num
,要么a<10
当匹配任何一个表达式为假时,它将停止。
这只是使用括号的用法。
a<num||10
传递给您的for循环的break条件时,它首先评估a<num
部分,然后是||10
部分。a<num
将为您提供一个true/false值,而10
将为您提供10(一个真实值),因此a<num||10
实际上会检查a<num
或10
中是否有一个真实值,这是正确的。因此,出现了无限循环。
a < num || 10
的意思是:如果(a < 10)或者(10)
。而且由于10为真值,所以该条件总是为真。 - Jeremy Thille