JavaScript短路表达式与三元运算符组合结果异常,求解析
问题原因:运算符优先级搞反了
你的问题核心是没搞清楚JavaScript里逻辑或||和三元运算符?:的优先级——||的优先级比?:高,所以代码里的表达式执行顺序和你想的完全不一样。
拆解你的代码执行过程
先看第一个例子:
let m = 6; let x=true; m = m || x ? 10 : 0;
实际执行顺序是:
- 先算
m || x:因为m=6是真值,逻辑或会短路直接返回6 - 再用这个结果执行三元判断:
6 ? 10 : 0——6是真值,所以返回10 - 最后把
10赋值给m,所以输出10
第二个例子同理:
let m = 6; let x=false; m = m || x ? 10 : 0;
m || x还是返回6(6是真值,不管x是什么,逻辑或直接返回第一个真值)- 三元判断
6 ?10:0依然返回10 - 赋值给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
相关产品推荐
相关产品推荐

