ES2020 空合并运算符 (??) 可以用于检查未声明的变量吗?

aal*_*aap 5 javascript ecmascript-2020

来自MDN

空合并运算符 ( ??) 是一个逻辑运算符,当其左侧操作数为nullor时,它返回其右侧操作数undefined,否则返回其左侧操作数。

但是,如果未声明变量,则以下语句似乎不起作用:

console.log(foobar ?? 555);
// Uncaught ReferenceError: foobar is not defined
Run Code Online (Sandbox Code Playgroud)

如果我显式声明该变量,它就会起作用:

let foobar;
console.log(foobar ?? 555);
// 555
Run Code Online (Sandbox Code Playgroud)

唯一的选择似乎是:

console.log(typeof foobar !== 'undefined' ? foobar : 555)
// 555
Run Code Online (Sandbox Code Playgroud)

是否有更干净的方法来检查某些内容是否未声明并返回后备值?

我知道有人反对为什么代码会检查未声明的变量。例如,以下函数接受一个参数而不为其分配默认值,这??看起来很有用:

const baz = (foobar) => (`${foobar ?? 555}baz`) // same as: const baz = (foobar = 555) => (`${foobar}baz`);
baz()
// 555baz
Run Code Online (Sandbox Code Playgroud)

这个场景是这个操作符的预期用途吗?如果是,那么还可以通过在签名中为参数分配默认值来提供服务,那么空合并运算符本身在有用性方面有何不同?

注意:上述语句在 Node.js 14 和 Chrome 88 中运行。