1

来自MDN

空值合并运算符 ( ??) 是一个逻辑运算符,当其左侧操作数为nullor时返回其右侧操作数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

这种情况是该运算符的预期用途吗?如果是,那么也可以通过在签名中为参数分配一个默认值来提供服务,那么 nullish 合并运算符在有用性方面有何不同呢?

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

4

0 回答 0