为什么表达式
1 && 2
的值是2?
console.log("1 && 2 = " + (1 && 2));
1 && 2
的值是2?
console.log("1 && 2 = " + (1 && 2));
&&(与运算符)只要链中的所有值都为“真”,则返回最后(右侧)一个值。
如果您尝试 0 && 2,则结果将为 0(即“假”)。
expr1 && expr2
会返回expr1
如果能被转换为false
;否则,返回expr2
。因此,当与布尔值一起使用时,&&
会在两个操作数都为真时返回true
;否则返回false
。由于1可以被评估为true
,所以1 && 2
返回2
。因为是and
,所有的值只需要评估到第一个0,返回最后一次评估的值,就是最后一个。
虽然这里与直接相关,但请注意按位
和逻辑
运算符之间存在差异。前者测试相同的位并仅返回它们,后者缩减为只有true
(!= 0)或false
(= 0),因此与直觉相反,按位AND
和AND
不可互换,除非值恰好为0
或1
。
||
做类似的事情。例如,0 || 1 || 2
将返回 1,而0 && 1 && 2
将返回 0。这是因为在第一个示例中,当||
遇到 1 时,OR 条件满足,它不需要继续执行并短路其余部分。而对于 AND &&,第一个条件使得 AND 不可能,因此短路了 1 和 2。 - Keith