为啥 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 && 3
是3
。
为了比较,请尝试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?