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

时间:2012-07-18 14:29:50

标签: javascript

测试代码是:

console.log(true && "abc");//abc

谁能告诉我为什么结果是abc

4 个答案:

答案 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,解释器执行以下操作:

  1. 评估表达式A,给出A V - A
  2. 的值
  3. 设A B 是将A V 转换为布尔值的结果
  4. 如果A B false,则&&表达式的值为A V
  5. 评估表达式B,给出B V
  6. 返回B V 作为&&表达式的值。
  7. 因此在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');