测试代码是:
console.log(true && "abc");//abc
Run Code Online (Sandbox Code Playgroud)
谁能告诉我为什么结果abc呢?
Jus*_*ner 19
如果可以转换为false,则返回expr1; 否则,返回expr2.因此,当与布尔值一起使用时,如果两个操作数都为真,则&&返回true; 否则,返回false.
true 显然不能被评估为false,所以返回第二个值"abc".
Poi*_*nty 10
&&JavaScript中的运算符与C或Java等有所不同.它总是返回最后一个计算的子表达式值(整个表达式是否为真 - "truthy" - 或false - "falsy")并且不强制布尔结果.当它失败时(其中一个值为"falsy"),则类似地结果是原始值,而不是值的布尔解释.
所以它是这样的:给定A && B,解释器执行以下操作:
false,那么&&表达式的值是A V.&&表达式的值.因此,在一个if语句中,该&&表达式与C或Java中的boolean-casting运算符具有相同的效果,因为该if语句本身对表达式的整体结果执行了一个truthy/falsy测试.然而,当它本身使用时,它更像是,"如果第一个表达式是真的,请给我第二个表达式的值,否则给我第一个表达式的值".