被 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;