JS关于 ?? 符号和 + 号运算的优先级?

作者站长头像
站长
· 阅读数 5
const o ={age:1};
function test() {
    return o.age??0 +1;
};
const b =test();
console.log(b) //1

昨天开发时遇到一个 bug,有一段类似于上述 o.age??+1 这样的一段逻辑,我最开始根本没有怀疑这个代码的合理性,查找半天以后,我抱着试一试的心理,将代码添加了一个括号, (o.age??0)+1 然后运算正常。

JS关于 ?? 符号和 + 号运算的优先级?

问: 为什么会 b= o.age??0+1 不符合正常的 b=2的期望结果呢?


根据下面答主的回答,自己总结了一下这个问题的答案:

o.age ??0 + 1 整段代码的运算逻辑是:

  1. 先计算 0+1 ,结果为 1;
  2. 然后取 o.age 的值,也就是上述值 1;
  3. 然后开始运算 ?? , 1 ?? 1;
  4. 由于前面的 1 不为 falsy;
  5. 则结果取 1
回复
1个回答
avatar
test
2024-06-25

??运算符的优先级比加法运算符+要低。所以,加法运算会首先被执行。也就变成 11 ?? (0 + 1)

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容