为什么2 && 3会产生3(javascript)?

luk*_*ups 8 javascript logic logical-operators

当我输入浏览器的控制台时:

console.log(2 && 3)
Run Code Online (Sandbox Code Playgroud)

它总是带有第二个数字(在这种情况下为3):

3
Run Code Online (Sandbox Code Playgroud)

有人能解释一下为什么吗?

Que*_*tin 15

如果左侧&&评估为假值,则整个表达式评估为左侧.

否则,它将评估为右侧.

2是真正的价值,2 && 3也是3.

为了比较,尝试console.log(0 && 1)console.log(false && "something").


Aru*_*hny 9

&&逻辑运算符将返回最后,如果所有其他值都truthy否则将返回第一个非truthy值.

所以在你的情况下,因为2是真实的,然后它将评估3,因为这是真实的它将被返回.

同样的方式2 && 0 && 4将返回,0因为它是一个非真实的价值.

逻辑运算符

逻辑运算符通常与布尔(逻辑)值一起使用.如果是,则返回布尔值.但是,&&和|| 运算符实际上返回其中一个指定操作数的值,因此如果这些运算符与非布尔值一起使用,则它们可能返回非布尔值.


Seb*_*mon 6

&&必须评估所有表达式.2 && 3首先会评估"真实性" 2是真正的价值,但它必须进行评估3.然后返回最后评估的值.如果至少有一个值是非真实的,则返回第一个这样的值.

||另一方面,如果没有真正的表达,则返回第一个真实表达或最后一个非真实表达.

&&返回最后一个可能值的原因是它只需检查所有表达式以返回结果.||不必这样做.如果第一个表达式为||true,则忽略所有其他表达式.同样,如果第一个表达式为&&false,则忽略所有其他表达式(请参阅逻辑运算符中的短路).