为什么JavaScript中console.log(0 && 0 === 0)返回0而非true?
为什么
console.log(0 && 0 === 0)返回0而不是true? 嘿,这个问题其实是JavaScript里两个核心规则在搞事情——逻辑与(&&)的短路求值特性和运算符优先级,我给你一步步拆解明白:
1. 先搞懂运算符优先级
在JavaScript里,===(严格相等)的优先级比&&(逻辑与)要高,所以不管是你给出的哪个示例,都会先计算xxx === xxx这部分,再处理&&的逻辑。
2. 再理解&&的短路求值规则
&&的工作逻辑很有意思:它会从左到右依次检查每个操作数:
- 如果遇到第一个假值(JavaScript里的假值包括:0、空字符串
''、null、undefined、NaN、false),就直接返回这个假值,后面的表达式完全不会执行(这就是“短路”); - 如果前面的操作数都是真值,就会返回最后一个操作数的结果。
现在逐个分析你的示例:
示例1:console.log(0 && 0 === 0);
- 先计算优先级更高的
0 === 0,结果是true; - 现在表达式变成了
0 && true,因为0是假值,&&直接返回这个假值0,所以最终输出0。
示例2:console.log(2 && 2 === 2);
- 先计算
2 === 2,结果是true; - 表达式变成
2 && true,2是真值,所以&&会继续处理后面的表达式,最终返回后面的true,所以输出true。
给你再补两个小例子加深理解:
'' && '我不会被执行'→ 返回''(空字符串是假值,直接返回)'我是真值' && 12345→ 返回12345(前面是真值,返回最后一个操作数)
内容的提问来源于stack exchange,提问作者Alexis_Ni
相关产品推荐
相关产品推荐

