逻辑AND(&&)和OR(||)运算符

时间:2014-08-18 08:53:38

标签: javascript

逻辑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

主要有两个问题:

  1. 这是一个错误,或者为什么JavaScript强制我们使用==运算符 使用&&||运营商时要注意订单?
  2. 为什么javascript无法在此表达式中将expr1转换为true ("" || false)?我的意思是,它不像在""前面加上那样简单 NOT(!)运算符?

1 个答案:

答案 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