逻辑AND(&&
)和OR(||
)运营商---谁知道他们可以这样欺骗我们:)
他们对JS(根据this解释)的定义如下:
expr1 && expr2 =>如果可以转换为false,则返回expr1; 否则,返回expr2。因此,当与布尔值一起使用时,&& 如果两个操作数都为真,则返回true;否则,返回false。
expr1 || expr2 =>如果可以转换为true,则返回expr1; 否则,返回expr2。因此,当与布尔值一起使用时,|| 如果任一操作数为true,则返回true;如果两者都是假的,则返回 假的。
测试它,确实它的定义与此一样,但问题在于:
false || "" //returns ""
"" || false //returns false
所以,显然:
(false || "") == ("" || false) // true
但是,遗憾的是
(false || "") === ("" || false) // false
主要有两个问题:
==
运算符 或
使用&&
和||
运营商时要注意订单?true
("" || false)
?我的意思是,它不像在""
前面加上那样简单
NOT(!
)运算符?答案 0 :(得分:3)
这就是他们的工作方式。这不是一个错误:
如果可以转换为false,则返回expr1; 否则,返回expr2
这意味着您可以使用“默认值”,如下所示:
function someFunc(passedParameter){
var newValue = passedParameter || 1337
}
或在满足条件时运行函数:
var myBool = true;
myBool && someFunc(); // someFunc will only be evaluated if `myBool` is truthy
<强> More info on truthy / falsy 强>