为什么console.log(10 < 14 < 50)输出true而console.log(10 > 7 > 2)输出false
原因分析
这是JavaScript比较运算符的左结合特性和布尔值隐式类型转换共同导致的结果,和数学上的链式比较逻辑完全不同。
运算规则说明
JavaScript中的比较运算符不会同时校验三个值的范围关系,只会从左到右依次执行两步运算:
- 先计算左侧第一个比较表达式,得到布尔值结果
- 将布尔值隐式转换为数字后,再参与第二个比较运算,布尔值转数字的规则为:
true转1,false转0
两个表达式的具体执行过程
1. 10 < 14 < 50 执行步骤
- 第一步运算:
10 < 14结果为true - 第二步运算:
true < 50隐式转换后等价于1 < 50,结果为true,因此最终输出true
2. 10 > 7 > 2 执行步骤
- 第一步运算:
10 > 7结果为true - 第二步运算:
true > 2隐式转换后等价于1 > 2,结果为false,因此最终输出false
正确的多范围比较写法
如果要实现数学意义上的链式范围判断,需要用逻辑与(&&)连接两个独立的比较表达式:
- 要判断
a < b < c正确写法为a < b && b < c - 要判断
10 > 7 > 2并得到true,正确写法为10 > 7 && 7 > 2
内容的提问来源于stack exchange,提问作者Ashish Bhalala
相关产品推荐
相关产品推荐

