2

我一直在使用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

但是我有问题理解a5a6并且a7

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

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

4

3 回答 3

3

所有非空字符串true在评估为布尔值时。

a6=false && "Cat"字符串 "Cat" 中根本不求值,因为左侧是false.

于 2013-01-15T15:40:18.640 回答
2

首先让我们看一下a5:

a5="Cat" && "Dog" 

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

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

由于非空字符串不能转换为false,所以它会返回dog,如果你改变and的顺序dogcat它当然会返回cat

在 a6 false 中,是 false,因此它因此返回false

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

在 a7cat中为真,因此它继续到下一个为假的表达式,因此返回假。

...否则,返回 expr2

于 2013-01-15T15:45:15.750 回答
0

a && b句子a中首先评估,如果atrue,则b评估。

  1. (a5 = "Cat")返回"Cat"which is true(只有空字符串是false),所以Dog返回。
  2. (a6 = false)返回,因此不评估false第二部分。"Cat"
  3. (a7 = "Cat")true,所以返回第二false部分。
于 2013-01-15T15:42:58.793 回答