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
将被忽略。
我刚刚注意到您可以在 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
: Returnsexpr1
if it can be converted to true; otherwise, returnsexpr2
. 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
将被忽略。