测试代码是:
console.log(true && "abc");//abc
谁能告诉我为什么结果是abc
?
答案 0 :(得分:19)
来自MDN (Logical Operators) - Logical And (&&):
如果可以转换为false,则返回expr1;否则,返回 表达式2。因此,当与布尔值一起使用时,&&如果两者都返回true 操作数是真的;否则,返回false。
true
显然不能被评估为false,因此返回第二个值“abc”。
答案 1 :(得分:10)
JavaScript中的&&
运算符与C或Java等有所不同。它总是返回最后一次计算的子表达式值(整个表达式是否为真 - “truthy” - 或false - “falsy”)并且不强制布尔结果。当它失败时(当其中一个值为“falsy”时),那么结果类似于原始值,而不是值的布尔解释。
所以它是这样的:给定A && B
,解释器执行以下操作:
false
,则&&
表达式的值为A V &&
表达式的值。因此在if
语句中,&&
表达式与C或Java中的boolean-casting运算符具有相同的效果,因为if
语句本身对表达式的整体结果进行了真正的测试。然而,当它本身使用时,它更像是,“如果第一个表达式是真的,请给我第二个表达式的值,否则给我第一个表达式的值”。
答案 2 :(得分:1)
&&
,则 false
返回左侧,否则返回右手大小。
true
不是false
,所以它会返回右侧,这是您的字符串。
> 0 && true // LHS is false, return LHS
0
> 1 && true // LHS is true, return RHS
true
> false && 0 // LHS is false, return LHS
false
> true && false // LHS is true, return RHS
false
答案 3 :(得分:1)
你可以在某种程度上修复"通过将表达式包装到!!()
:
!!(true && 'abc');