ES2020 引入了由双问号 ?? 表示的空值合并运算符。空值合并运算符是一个接受两个值的逻辑运算符:

从技术上讲,空值合并运算符等效于以下语句:

此示例返回 28,因为第一个值是undefined:

结果是 1,而不是 0,这是您可能想不到的。

空值合并运算符可帮助您避免这种陷阱。当第一个值是null 或者 undefined 时,它只返回第二个值。

跟逻辑或和与运算符类似,如果第一个操作数不是undefined 或者是 null ,空值合并运算符也不计算第二个值。

以下示例评估第二个表达式,因为第一个表达式是 undefined:

如果将逻辑 AND 或 OR 运算符直接与空值合并运算符组合使用,则会出现 SyntaxError,如下所示:

但是,您可以将运算符 ?? 左侧的表达式括在括号中指定运算符优先级来避免此错误:

空值合并运算符 ?? 是一个逻辑运算符,它接受两个值并在第一个值是 null 或者 undefined 时返回第二个值。

空值运算符被短路,不能直接与逻辑 AND 或 OR 运算符组合使用。