为何变量y在&&与||运算符场景下alert输出不同值?
为什么&&和||会让y输出不同的值?
这其实是JavaScript逻辑运算符的短路求值特性在搞事情,咱们结合你提到的两种情况拆解清楚:
首先得明确JS里&&和||的核心行为——它们返回的不一定是布尔值,而是参与运算的某个表达式的值,而且会根据左边的值决定要不要计算右边(这就是“短路”的由来)。
关于&&(逻辑与)的情况(y输出4)
假设你的第一段代码是类似这样的:
let y = 5 && 4; alert(y); // 弹出4
&&的规则是:
- 先计算左边的表达式(这里是
5,属于真值——JS里除了null、undefined、0、""、false、NaN之外的值都是真值); - 因为左边是真值,
&&会继续计算右边的表达式,然后返回右边的值; - 所以这里右边是
4,y就等于4,alert出来就是4。
如果左边是假值(比如0 && 4),那会直接返回左边的0,根本不会碰右边的4。
关于||(逻辑或)的情况(y输出5)
对应的第二段代码大概是:
let y = 5 || 4; alert(y); // 弹出5
||的规则正好和&&在真值判断后的行为相反:
- 先计算左边的表达式(
5,真值); - 因为左边已经是真值了,
||就直接返回左边的值,不会再去计算右边的表达式(这就是短路); - 所以y等于左边的
5,alert出来就是5。
如果左边是假值(比如0 || 4),那会跳过左边,返回右边的4。
总结一下:
&&:找第一个假值,找不到就返回最后一个真值;||:找第一个真值,找不到就返回最后一个假值。
这就是为什么同样是两个数字参与运算,用&&和||会得到不同结果的原因啦。
内容的提问来源于stack exchange,提问作者user3760959
相关产品推荐
相关产品推荐

