js运算符优先级

作者:zccst

js运算符优先级也是一个巨大的坑。有时候你会被绕进去,例如:

var tpl = len > max && exceedTpl || defaultTpl;

按照我的理解,当len小于max时,第一个为假,后面又是&&,所以直接跳过执行下一行。
但实际是tpl等于defaultTpl。

测试用例:

3 > 5 && ‘a‘ || ‘b‘; // ‘b‘
3 > 5 || ‘a‘ && ‘b‘; // ‘b‘

解析: 3>5是false,与‘a‘ &&,结果是false,继续执行表达式 ||,结果是‘b‘
3>5是false,与‘a‘ ||,结果是true,由于后面是 && 必须执行,‘b‘也是true,最终结果是true,且返回 ‘b‘。


5 > 3 && ‘a‘ || ‘b‘ ;//"a"
5 > 3 || ‘a‘ && ‘b‘ ;true

解析:
5 > 3 && ‘a‘为真,且后面是||,所以直接返回,不再计算。
5 > 3为真,且后面是||,所以直接返回,不再计算。

由于本例中,exceedTpl和defaultTpl始终为真。类似
3 > 5 && ‘a‘ || ‘b‘;或
5 > 3 && ‘a‘ || ‘b‘;
所以结果只有两种情况:前者是‘b‘,后者是‘a‘
当最前面值相等的时候,大于仍然不成立,仍然结果是‘b‘




补充
3 > 5 || ‘‘ && ‘b‘; //‘‘
5 > 3 && ‘‘ || ‘b‘; //"b"

因为3>5假,执行||,假,直接返回‘‘
5>3为真,继续与‘‘&&,结果为假,继续||,并返回||后面的值。

如果此时‘b‘是false,结果也返回false,即
5 > 3 && ‘‘ || false; //false

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。