增加对AND运算符的理解

时间:2013-01-15 15:36:48

标签: javascript

我一直使用MDN Docs - Logical Operators作为参考框架来理解逻辑AND运算符。

我已经理解了大部分代码示例,尤其是前面的4个代码示例:

a1=true && true       // t && t returns true
a2=true && false      // t && f returns false
a3=false && true      // f && t returns false
a4=false && (3 == 4)  // f && f returns false
a5="Cat" && "Dog"     // t && t returns Dog
a6=false && "Cat"     // f && t returns false
a7="Cat" && false     // t && f returns false

但我对问题a5a6a7有疑问。

我无法理解两个字符串a5="Cat" && "Dog"如何评估true && true returns Dog

我也无法理解为什么字符串“Cat”在a6=false && "Cat" // f && t returns false

中评估为true

2 个答案:

答案 0 :(得分:2)

首先让我们看看a5:

a5="Cat" && "Dog" 

返回dog,mdn-docs声明AND(&&):

  

如果可以转换为false,则返回expr1;否则,返回expr2。因此,当与布尔值一起使用时,&&如果两个操作数都为真,则返回true;否则,返回false。

由于非空字符串无法转换为false,因此如果您更改dogdog的顺序,它将返回cat,它将返回{{ 1}}。

在a6 false中,为false,因此返回cat

  

如果可以转换为false,则返回expr1 ...

在a7中false为真,因此它会继续执行下一个表达式,该表达式为false,因此返回false。

  

...否则,返回expr2

答案 1 :(得分:0)

首先评估a && ba,如果atrue,则评估b

  1. (a5 = "Cat")返回"Cat" true(只有空字符串为false),因此会返回Dog
  2. (a6 = false)会返回false,因此不评估第二个"Cat"部分。
  3. (a7 = "Cat")true,因此会返回第二个false部分。