console.log() 语句中的布尔条件

Boolean conditions in console.log() statement

我刚刚注意到您可以在 console.log 中放置布尔表达式,例如console.log("hey" || 2) 在这种情况下 hey 将打印到控制台 window.

我不是 100% 确定 console.log 在有条件时如何确定要打印的内容。

JavaScript中有truthy and falsy个值的概念。非空字符串被认为是 truthy 值,因此 "hey" 计算为 true 并被打印,因为在这种情况下 || 之后的部分不会被计算.

一般来说truthy都是不是false,0,"",null,[=的值17=], 或 NaN.

MDN 定义 OR 表达式的计算如下:

Logical OR (||) expr1 || expr2: Returns expr1 if it can be converted to true; otherwise, returns expr2. Thus, when used with Boolean values, || returns true if either operand is true; if both are false, returns false.

所以按照这个逻辑 console.log() 在你的陈述中打印出第一个真实的表达。如果您要尝试 console.log(null || 2),则会打印出 2

最简单地说,当表达式中存在逻辑运算符时,它将尝试计算整个表达式 - 因为“||”表示 "or",当 "hey" 被评估时,它 returns true,因此不需要进一步评估表达式。

如果 a 值是 falsy(false, undefined, 0, NaN and "") 那么它会取右边 value.else 它会打印 a 本身。

var a = null;

console.log(a || 10); //10 will print

var a = 20;

console.log(a || 10);//20 will print

好吧,让我试着把我的两分钱加到 Bohuslav 的精彩解释中......如果你想看到一个很好的实际例子,请查看书中的这个练习 Eloquent Javascript:

“嘶嘶声

编写一个程序,使用 console.log 打印从 1 到 100 的所有数字,但有两个例外。对于能被 3 整除的数字,打印 "Fizz" 而不是数字,对于能被 5(而不是 3)整除的数字,打印 "Buzz" 而不是数字。

当你有这个工作时,修改你的程序以打印 "FizzBuzz",对于可被 3 和 5 整除的数字(并且仍然打印 "Fizz" 或 "Buzz" 对于可整除的数字只有其中之一)。"

solution:

for (var n = 1; n <= 100; n++) {
    var output = "";
    if (n % 3 == 0)
        output += "Fizz";
    if (n % 5 == 0)
        output += "Buzz";
    console.log(output || n);
}

这里变量output是一个空字符串,所以控制台日志不会打印它,因为空字符串是假的;但是只要将 "Fizz" 或 "Buzz" 添加到它的值中,它就会变成 truthy 并打印出来而不是 n

请注意,它不会以相反的方式工作:console.log(n || output)。由于 n 是第一个表达式并且始终为真,因此每次都会打印它,而 output 将被忽略。