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

posted on 2015-02-13 11:15  山冈龙  阅读(235)  评论(0编辑  收藏  举报

导航