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
然后运算正常。
问: 为什么会 b= o.age??0+1
不符合正常的 b=2
的期望结果呢?
根据下面答主的回答,自己总结了一下这个问题的答案:
o.age ??0 + 1
整段代码的运算逻辑是:
- 先计算 0+1 ,结果为 1;
- 然后取 o.age 的值,也就是上述值 1;
- 然后开始运算 ?? , 1 ?? 1;
- 由于前面的 1 不为 falsy;
- 则结果取 1
??运算符的优先级比加法运算符+要低。所以,加法运算会首先被执行。也就变成 11 ?? (0 + 1)