为什么bool(true)&& string的结果是javascript中的字符串?

art*_*twl 22 javascript

测试代码是:

console.log(true && "abc");//abc
Run Code Online (Sandbox Code Playgroud)

谁能告诉我为什么结果abc呢?

Jus*_*ner 19

来自MDN(逻辑运算符) - 逻辑和(&&):

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

true 显然不能被评估为false,所以返回第二个值"abc".


Poi*_*nty 10

&&JavaScript中的运算符与C或Java等有所不同.它总是返回最后一个计算的子表达式值(整个表达式是否为真 - "truthy" - 或false - "falsy")并且不强制布尔结果.当它失败时(其中一个值为"falsy"),则类似地结果是原始值,而不是值的布尔解释.

所以它是这样的:给定A && B,解释器执行以下操作:

  1. 评估表达式A,给出A V - A 的值
  2. 设A B是将A V转换为布尔值的结果
  3. 如果A Bfalse,那么&&表达式的值是A V.
  4. 评估表达式B,得到B V.
  5. 返回B V作为&&表达式的值.

因此,在一个if语句中,该&&表达式与C或Java中的boolean-casting运算符具有相同的效果,因为该if语句本身对表达式的整体结果执行了一个truthy/falsy测试.然而,当它本身使用时,它更像是,"如果第一个表达式是真的,请给我第二个表达式的值,否则给我第一个表达式的值".