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


如果您觉得本文的内容对您的学习有所帮助,您可以微信:
[img]http://dl2.iteye.com/upload/attachment/0109/0668/fb266dfa-95ca-3d09-b41e-5f04a19ba9a1.png[/img]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值