JavaScript链式三元运算符右结合性的理解困惑
链式三元运算符的右结合性:你理解错了,MDN没说错
先看你用到的示例代码:
const AQI = 340; const airQuality = AQI < 50 ? "Air Quality is GOOD" : AQI < 100 ? "Air Quality is MODERATE" : "Air Quality is BAD"; console.log(airQuality); // 输出 "Air Quality is BAD"
MDN说三元运算符是右结合性,指的不是求值顺序从右到左,而是表达式的分组优先级是从右到左。换句话说,上面的代码会被JS引擎解析成这样的结构:
const airQuality = AQI < 50 ? "Air Quality is GOOD" : (AQI < 100 ? "Air Quality is MODERATE" : "Air Quality is BAD");
而非你误以为的左分组结构:
const airQuality = (AQI < 50 ? "Air Quality is GOOD" : AQI < 100) ? "Air Quality is MODERATE" : "Air Quality is BAD";
代入AQI=340的情况:
- 先判断第一个条件
AQI < 50,340不满足,进入冒号后的分组表达式 - 再判断分组内的
AQI < 100,340依然不满足,最终返回最右侧的"Air Quality is BAD"
这完全匹配实际输出结果。你之前的误解是把“右结合性”等同于“先计算最右侧表达式”,但结合性仅决定表达式的分组方式,求值逻辑依然是按分组后的结构从左到右执行的。
内容的提问来源于stack exchange,提问作者Real Noob
相关产品推荐
相关产品推荐

