从
MDN
:
零合并算子(
??
)是一个逻辑运算符,当其左侧操作数为空时返回其右侧操作数
null
undefined
,否则返回其左侧操作数。
console.log(foobar ?? 555);
// Uncaught ReferenceError: foobar is not defined
如果我显式声明变量,它将起作用:
let foobar;
console.log(foobar ?? 555);
// 555
唯一的选择似乎是:
console.log(typeof foobar !== 'undefined' ? foobar : 555)
// 555
未申报
我知道有人反对为什么代码会检查一个没有声明的变量。例如,下面的函数接受一个参数而不为其指定默认值,使
??
似乎有用:
const baz = (foobar) => (`${foobar ?? 555}baz`) // same as: const baz = (foobar = 555) => (`${foobar}baz`);
baz()
// 555baz
这个场景是这个操作符的预期用途吗?如果是,那么也可以通过在签名中为参数指定一个默认值来提供服务,那么null合并操作符在有用性上有什么不同呢?
注:
上面的语句在Node.js 14和Chrome 88中运行。