aal*_*aap 5 javascript ecmascript-2020
来自MDN:
空合并运算符 (
??
) 是一个逻辑运算符,当其左侧操作数为null
or时,它返回其右侧操作数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 中运行。