【发布时间】:2020-04-20 16:38:57
【问题描述】:
这是我的代码:
for (let i = 0; i <= 100; i++) {
let output = "";
if (i % 3 === 0) {
output += "Cool";
}
if (i % 5 === 0) {
output += "Breeze";
}
console.log(output || i);
}
在此代码中,我使用 for 循环将绑定 i 的值从 0 更改为 100。
在第一个 if 语句中,我使用模数和加法赋值运算符将字符串“Cool”添加到绑定输出。
在第二个 if 语句中,我使用模数和加法赋值运算符将字符串“Breeze”添加到绑定输出。
我的 for 循环主体中的最后一条语句的功能是在浏览器控制台中打印输出绑定的值。我通过短路来做到这一点。现在,我了解了使用“OR”运算符进行短路的逻辑,因为解释器将短路其比较两个操作数的完整逻辑,如果可以将其转换为true,则自动选择左侧的操作数,即字符串和数字都可以,所以操作数 output 总是会被选择。
我不明白为什么需要短路才能在控制台中明显打印每个值。如果我要使用语句console.log(output);,它会合并数字类型值,说明在打印字符串之前连续打印了多少个。
有人能解释一下这个逻辑吗?为什么这里需要短路以防止合并?
【问题讨论】:
-
简单地说,当你 OR 值时,你会得到他的第一个 truthy 值。所以,如果
output被改变了,它就是真的,所以output || i会返回output,但是如果output = "",空字符串是falsy,所以output || i返回@ 987654331@ -
这简单解释了短路的逻辑。我已经明白 0、NaN 和空字符串都算作假,如果它们是左操作数,就永远不会被选中。
-
如果你只是
console.log(output),那么i等于0,1,2,4,6等等,你只是打印一个空字符串,你永远不会打印数字。
标签: javascript for-loop modulo short-circuiting