[返回编程技术首页]·[所有跟帖]·[ 回复本帖 ] ·[热门原创] ·[繁體閱讀]·[坛主管理]

&&和||运算符优先级(JS)

送交者: lycba[☆品衔R4☆] 于 2024-04-21 21:03 已读 2898 次 1赞  

lycba的个人频道

+关注
转自:https://juejin.cn/post/6978997871643197471
这是我参与更文挑战的第9天,活动详情查看: 更文挑战

1. 前言


之前搭档的同事准备跑路了、部分工作就交接到我这儿了、比如codeReview。此文章的话题源于codeReview、先看看如下代码.
// 此Demo演示方是在微信小程序-先获取组件实例、然后想调用组件内方法、简化版如下
const ref = this.selectComponent(`#comp`) || null
ref.methods()

上述代码存在2个问题:
this.selectComponent()API在非常老的版本是不支持的、可能会报错;
ref对象未进行判空就直接调用其方法;
想到的优化方案:
// 预期: 若存在this.selectComponent的话则获取组件实例、否则返回空对象null.
const ref = this.selectComponent && this.selectComponent(`#comp`) || null
ref && ref.methods()

写到这里、有点迷茫了、&&跟||同级使用、谁的优先级高点呢?
接下来主要是解答这个困惑的!

2. 运算符


2.1 逻辑或(||)
||运算符: 条件1 || 条件2
若条件1为true、返回条件1, 且条件2代码不会执行;
若条件1为false、不管||后面是true还是false、都是返回||后面的值、即则返回条件2;
console.log(0||''); // ''
console.log(''||0); // 0

2.2 逻辑与(&&)
&&运算符: 条件1 && 条件2
若条件1为false、无论条件2为true或false, 都将返回条件1的值;
若条件1为true, 无论条件2为true或者false, 都将返回条件2的值;
console.log(0&&''); // 0
console.log(''&&0); // ''

逻辑||跟&&都遵行短路原则, 只要确定符号前面的真假、即可确定返回值.

3. 优先级


若&&跟||同时出现、谁的优先级比较高呢?
console.log(1 || 'a' && 2); // 1
console.log('a'&& 2 || 1); // 2

假设||的优先级不低于&&, 那么上述代码预期返回2、跟实际验证结果1不符合、故该结论是不成立的。
官方说明: &&运算符的优先级高于||运算符.
注意事项: 为增加代码的可读性、若涉及到多级||/&&判定的、建议用()包裹、增加代码可读性.
诡异的事情发生了、会推翻了上述论证:
true || alert(2) && false; // 结果为true、alert(2)并未执行
// 若按照&&运算符高于||运算符的话、那么应该alert(2)、然后结果为true、但跟实际代码运行结果不一致、故可推翻

故经过综合学习后、发现以下这个结论应该是比较准确的、但仍保持小疑惑状态哦、欢迎各位大佬们指教指教~
若遇到||运算符、先去计算左边表达式得出结果、若结果为true, 则不会执行右边的表达式[短路运算生效];若结果为false, 则去执行右边的表达式、再根据两边的结果执行||运算符.

4. 写在最后


若有错误之处, 恳请留言, 定会及时更正!
若觉着对您有帮助的话恳请点个赞或着收藏吧!

转自:https://juejin.cn/post/6978997871643197471
贴主:lycba于2024_04_21 21:12:07编辑
喜欢lycba朋友的这个贴子的话, 请点这里投票,“赞”助支持!

内容来自网友分享,若违规或者侵犯您的权益,请联系我们

所有跟帖:   ( 主贴楼主有权删除不文明回复,拉黑不受欢迎的用户 )


用户名: 密码: [--注册ID--]

标 题:

粗体 斜体 下划线 居中 插入图片插入图片 插入Flash插入Flash动画


     图片上传  Youtube代码器  预览辅助



[ 留园条例 ] [ 广告服务 ] [ 联系我们 ] [ 个人帐户 ] [ 创建您的定制新论坛频道 ] [ Contact us ]