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

时间:2015-10-21 07:23:26

标签: javascript console.log

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

我并非100%确定当console.log内有条件时entry确定要打印的内容。

4 个答案:

答案 0 :(得分:9)

JavaScript中有Why can't I set a cookie and redirect?truthy值的概念。非空字符串被视为 truthy 值,因此"hey"计算结果为true并打印,因为在这种情况下不评估||之后的部分。

一般来说, truthy 都是非false0""nullundefined的值,或者NaN

falsy定义OR表达式的评估如下:

  

逻辑OR(||expr1 || expr2:如果可以转换为expr1,则返回expr2   真正;否则,返回||。因此,当与布尔值一起使用时,   如果任一操作数为真,则console.log()返回true;如果两者都是假的,则返回   假的。

所以通过这个逻辑console.log(null || 2)在你的语句中输出第一个truthy表达式。如果您尝试2,则会打印1D-GS- GROUP SEPARATOR-DATA ELEMENT SEPARATOR 1E-RS- RECORD SEPARATOR-REPETITION SEPARATOR 1F-US- UNIT SEPARATOR-SUBSEQUENT SEPARATOR 1C-FS- FILE SEPARATOR-SEGMENT TERMINATOR

答案 1 :(得分:1)

最简单地说,当表达式中存在逻辑运算符时,它将尝试计算整个表达式 - 并且因为“||”表示“或”,当评估“hey”时,它返回true,因此无需进一步评估表达式。

答案 2 :(得分:1)

如果a值为falsy(false,undefined,0,NaN和"")那么它将采用右侧值。否则它将打印出一个本身。

var a = null;

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

var a = 20;

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

答案 3 :(得分:0)

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

“FizzBu​​zz

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

如果你有这个工作,修改你的程序打印“FizzBu​​zz”,对于可以被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”添加到其值中,它就会变得真实并且打印出来而不是n

请注意,它不会反过来使用:console.log(n || output)。由于n是第一个表达式并且始终为true,因此每次都会打印它,output将被忽略。