JavaScript 双问号 (??) 是什么?

2025年3月3日 | 阅读 5 分钟

这个ECMA提案中的一项新功能是双问号(??),它也被称为空值合并运算符。双问号是JavaScript中的一个逻辑运算符,它接受两个输入。如果左侧的值为null或undefined,则返回右侧的值,否则返回左侧的操作数。

JavaScript双问号有一个特殊情况,那就是逻辑或(||)运算符。当左操作数是任何假值(不仅仅是null或undefined)时,在空值合并的情况下会返回右操作数。空值合并运算符的优先级是第五低的。

何时应用空值合并运算符

JavaScript中的空值合并运算符使处理null或undefined值变得更加容易。它允许您为这些类型的值设置一个一致的默认值。

应用时,它在以下情况下可能很有用

  1. 为可能为null或undefined的变量提供默认值:此功能消除了使用逻辑或运算符(||)为可能为null或undefined的变量提供默认值的需要。例如,如果您想避免使用逻辑或运算符可能产生的意外后果,并且提供的默认值也是真值,那么这将非常有用。
  2. 管理可选函数参数:它能够一致且清晰地处理可选函数参数。例如,假设您有一个接受可选参数的函数。如果未提供参数,则可以使用空值合并运算符为该参数提供默认值。
  3. 替换三元运算符:空值合并运算符可用于替换三元表达式中的三元运算符(?:),从而简化它们。这有助于提高代码的可读性和可维护性。
  4. 增强代码可读性:它提供了一种简洁明了的处理undefined或null值的方法。它通常用于使代码更易于阅读。
  5. 请记住,在某些情况下,仍应使用逻辑或运算符而不是空值合并运算符。在某些情况下,逻辑或运算符可能仍然是必需的,例如当您需要为真值设置默认值时。因此,在您专门想处理null或undefined值的场合,它可能是一个有用的工具。

语法

空值合并的符号是两个问号(??)。

结果

  1. 如果leftExpr已定义,则为leftExpr,
  2. 如果leftExpr未定义,则使用rightExpr。

注意:需要注意的是,??如果左参数不是undefined或null,则返回左参数。否则显示右参数。

它是如何工作的?

双问号(??)左侧的值简单地设置为undefined或null。如果是,则给出其右侧的值。如果不是,则给出左侧的值。

假设您正在选择的汽车型号。当您访问主网站时,您会发现它们缺货了。幸运的是,您有另一个符合您想法的型号。在这种情况下,左侧的值代表汽车,右侧的值代表汽车的型号。您正在选择要选择什么,并在看到双问号(??)时寻找汽车。

输出

What is JavaScript Double Question Mark (??)

JavaScript中被视为假值的那些值

如果一个值在布尔上下文中出现,那么它就被称为假值(也写为false)。下面列出的值是JavaScript中唯一被视为假值的六个值。

false: 关键字 false。

输出

What is JavaScript Double Question Mark (??)

undefined: 原始值。

输出

What is JavaScript Double Question Mark (??)

null: 任何值的缺失。

输出

What is JavaScript Double Question Mark (??)

""(空字符串):空字符串值。

输出

What is JavaScript Double Question Mark (??)

由于我们在“if”条件中没有提供任何内容,因此以上所有内容都不会打印任何内容。所以以上所有都代表“假值”。

为什么JavaScript中需要空值合并运算符?

||运算符很有用。但有时,我们只希望在第一个操作数为null或undefined时才评估下一个表达式。

逻辑或运算符(||)用于设置变量的默认值。这是一个例子

代码

输出

What is JavaScript Double Question Mark (??)

在上面的示例中,value变量是undefined,因此被强制为false。因此,结果是6。

然而,当您接受空字符串“”或0作为有效值时,逻辑或(||)运算符可能会令人困惑,如下例所示

代码

输出

What is JavaScript Double Question Mark (??)

答案是1,而不是0,尽管您可能没有预料到。

JavaScript双问号或空值合并运算符用于避免这些问题。只有当第一个值为null或undefined时,它才返回第二个值。

总结

总之,JavaScript功能双问号也被称为空值合并运算符。它为null或undefined值设置默认值,并以连续两个问号(??)的形式出现。

与逻辑或运算符(||)不同,它仅在左侧表达式为null或undefined时才返回默认值。因此,您可以更可靠、更可预测地处理代码中的null或undefined值,而无需使用复杂的条件语句。在设置变量的默认值、处理可选函数参数和简化三元表达式等情况下,空值合并运算符可能非常有用。通过清晰简洁地处理null或undefined值,您的代码可以轻松阅读。

在处理代码中的null或undefined值时,空值合并运算符是JavaScript语言整体上的一个有益的补充。