You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript短路表达式与三元运算符组合结果异常,求解析

问题原因:运算符优先级搞反了

你的问题核心是没搞清楚JavaScript里逻辑或||和三元运算符?:的优先级——||的优先级比?:高,所以代码里的表达式执行顺序和你想的完全不一样。

拆解你的代码执行过程

先看第一个例子:

let m = 6;
let x=true;
m = m || x ? 10 : 0;

实际执行顺序是:

  1. 先算m || x:因为m=6是真值,逻辑或会短路直接返回6
  2. 再用这个结果执行三元判断:6 ? 10 : 0——6是真值,所以返回10
  3. 最后把10赋值给m,所以输出10

第二个例子同理:

let m = 6;
let x=false;
m = m || x ? 10 : 0;
  1. m || x还是返回6(6是真值,不管x是什么,逻辑或直接返回第一个真值)
  2. 三元判断6 ?10:0依然返回10
  3. 赋值给m,输出10

你原本预期的写法

如果你想实现m = 6 || 10或者m=6||0的效果,需要给三元运算加括号,强制改变执行顺序:

// 当x=true时,等价于m=6||10,结果6
m = m || (x ? 10 : 0);

这样会先算括号里的x?10:0,再和m做逻辑或运算,最后赋值给m,结果就和你预期的一致了。

内容的提问来源于stack exchange,提问作者The Prenx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 09:55:26