我一直使用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
但我对问题a5
,a6
和a7
有疑问。
我无法理解两个字符串a5="Cat" && "Dog"
如何评估true && true returns Dog
我也无法理解为什么字符串“Cat”在a6=false && "Cat" // f && t returns false
答案 0 :(得分:2)
首先让我们看看a5:
a5="Cat" && "Dog"
返回dog
,mdn-docs声明AND(&&):
如果可以转换为false,则返回expr1;否则,返回expr2。因此,当与布尔值一起使用时,&&如果两个操作数都为真,则返回true;否则,返回false。
由于非空字符串无法转换为false,因此如果您更改dog
和dog
的顺序,它将返回cat
,它将返回{{ 1}}。
在a6 false中,为false,因此返回cat
:
如果可以转换为false,则返回expr1 ...
在a7中false
为真,因此它会继续执行下一个表达式,该表达式为false,因此返回false。
...否则,返回expr2
答案 1 :(得分:0)
首先评估a && b
句a
,如果a
为true
,则评估b
。
(a5 = "Cat")
返回"Cat"
true
(只有空字符串为false
),因此会返回Dog
。(a6 = false)
会返回false
,因此不评估第二个"Cat"
部分。(a7 = "Cat")
为true
,因此会返回第二个false
部分。