为什么布尔(true)&&string是javascript中的字符串

Why the result of bool(true) && string is string in javascript?

本文关键字:amp javascript 字符串 string true 布尔 为什么      更新时间:2023-11-19

测试代码为:

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

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

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

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

true显然不能计算为false,因此返回第二个值,即"abc"。

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

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

  1. 评估表达式A,给出AV—A的值
  2. 设AB是将AV强制转换为布尔值的结果
  3. 如果ABfalse,则&&表达式的值是AV
  4. 评估表达式B,给出BV
  5. 返回BV作为&&表达式的值

因此,在if语句中,&&表达式具有与C或Java中的布尔型强制转换运算符相同的效果,因为if语句本身对表达式的整体结果执行truthy/falsy测试。然而,当它自己使用时,它更像是,"如果第一个表达式是真的,就给我第二个表达式的值,否则就给我第一个表达式的价值"。

&&返回左手边,如果左手边计算为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

您可以通过将表达式包装到!!():中来"修复"这个问题

!!(true && 'abc');