js中的||与&&优先级比较

“||”与“&&”的基础介绍

a||b “||”运算符先计算a,a的值转换为布尔值为true,“||”运算符就会直接返回a的值作为返回值,不会计算b的值(短路),当a转换为布尔值为false的时候才会直接返回b的值作为“||”运算符的返回值。

a&&b 在运算符“&&”中,如果a的值转换为布尔值为false,就会直接返回a的值作为“&&”运算符的返回值(短路),如果a的值转换为布尔值为true,才会返回b的值作为“&&”运算符的返回值。

那么“||”与“&&”的优先级究竟是谁高?

根据Mozilla 开发者社区(MDN)的技术文档

6逻辑与从左到右… && …
5逻辑或从左到右… || …

“&&”的优先级为6,“||”的优先级为5。所以按照技术文旦来看在一个出现“&&”与“||”的表达式中“||”的优先级是低的。

但是“&&”与“||”的优先级比较真的是这样的吗?

先来看一下

let a=true,b=false,c=false;
console.log(a||b&&c);

按照技术文档说的这个语句先计算b&&c,返回false,然后在计算a||false,最后返回结果true。嗯这样看文档说的优先级好像是没错,但是我们继续往下看。

let a=true,b=false,c=false;   
console.log(a||(a=3||c)&&(b=2));

思考一下,这段语句执行结果又会返回什么?

按照文档来 首先计算(a=3||c)&&(b=2)部分,然后计算a=3||c部分,然后计算a=3,所以就相当于计算a||(a=3)&&(b=2),在计算进一步简化就是a||b=2,最后返回a的值,也就是3。

但是正确的返回值却是true。

为什么呢?

因为表达式a||(a=3||c)&&(b=2)直接计算了运算符“||”,直接返回了a的true值,短路了后面的操作。

这里可以看出运算符“&&”优先级并没有比“||”高。

然后再继续看

console.log(0&&4||1);

结果返回的是1,如果“||”比“&&”优先那么返回的结果会是0;

所以从以上的例子看来,“||”与“&&”并没有比对方优先级高,所以js中“||”与“&&”优先级为平级。

 

个人原创 转载声明

 

 

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值