为啥 2 && 3 结果为 3 (javascript)? [复制]

Posted

技术标签:

【中文标题】为啥 2 && 3 结果为 3 (javascript)? [复制]【英文标题】:Why does 2 && 3 results in 3 (javascript)? [duplicate]为什么 2 && 3 结果为 3 (javascript)? [复制] 【发布时间】:2015-07-26 23:50:21 【问题描述】:

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

console.log(2 && 3)

结果总是第二个数字(在本例中为 3):

3

谁能解释一下为什么?

【问题讨论】:

【参考方案1】:

如果&& 的左侧计算为假值,则整个表达式计算为左侧。

否则它评估为右手边。

2 是一个真值,所以2 && 33

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

【讨论】:

【参考方案2】:

如果所有其他值都是真值,&& logical operator 将返回最后一个值,否则它将返回第一个非真值。

所以在你的情况下,因为 2 是真实的,那么它将评估 3 并且因为它是真实的,所以它将被返回。

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

Logical Operator

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

【讨论】:

【参考方案3】:

&& 必须计算所有表达式。 2 && 3 将首先评估2 的“真实性”,这是一个真实值,但随后它也必须评估3。然后返回最后一个评估值。如果至少有一个值不真实,则返回第一个这样的值。

另一方面,

|| 返回第一个真实表达式,如果没有真实表达式,则返回最后一个非真实表达式。

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

【讨论】:

以上是关于为啥 2 && 3 结果为 3 (javascript)? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

if(a==1 && a==2 && a==3) 结果为 true,怎么做到的?打破你的认知!

if(a==1 && a==2 && a==3) 结果为 true,怎么做到的?打破你的认知!

按位运算的意外结果为啥 (1 | 1 & 2) 给出 1 而不是 2?

为啥 ( x & 3 ) 与 ( x mod 4 ) 相同?

为啥 CRT 和 VS 内存分析的结果如此不同?

如何用“与”,“或”,“非” 实现 “异或”运算?