JavaScript逻辑或与三元运算符优先级问题咨询
为什么x和y的输出结果不同?
问题核心是运算符优先级——JavaScript里三元运算符?:的优先级比逻辑或||更高,导致两个语句的解析逻辑完全不一样:
解析x的语句
var x = 5 || true ? 100 : 1000;
因为?:优先级更高,这个表达式会被自动分组为:
var x = (5 || true) ? 100 : 1000;
5 || true的结果是5(逻辑或遇到第一个真值就返回),5是真值,所以三元运算符执行第一个分支,x最终等于100。
解析y的语句
var y = 5 || (true ? 100 : 1000);
这里的括号强制改变了运算顺序,先执行括号内的三元运算:true ? 100 : 1000得到100,然后执行逻辑或5 || 100,因为5是真值,直接返回5,所以y最终等于5。
直白点说:不带括号的情况下,三元运算会优先和||两边的表达式结合,不会让||先执行。
内容的提问来源于stack exchange,提问作者Maverick
相关产品推荐
相关产品推荐

