??纳尼!这不是坑人嘛!

53 阅读1分钟

被 js 的 ?? 空值合并操作符坑了一把,优先级太低了!

当你希望某个变量为 null 或 undefined 时,用指定值代替 null 或 undefined,于是写出如下代码:

const b = a ?? 1 + 2;

乍一看,这段代码有问题吗?

没有!

当 a 为 null 或 undefined 时,运行结果如预期:b 为3

但是!

当 a 不为 null 或 undefined 时,表达式结果 b 始终等于 a

有点反直觉,是不是?

因为运算符 + 的优先级高于 ??,这不是坑人嘛!

修复也简单:

const b = (a ?? 1) + 2;