码迷,mamicode.com
首页 > Web开发 > 详细

js运算符优先级

时间:2015-02-13 13:05:34      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:

作者: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

js运算符优先级

标签:

原文地址:http://www.cnblogs.com/shsgl/p/4289943.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!