ECMAScript 2021 的新特性:了解有关 nullish 操作符的一切

ECMAScript 2021 是 JavaScript 最新的版本,它增加了许多新特性和改进。其中一个最令人兴奋的新特性是 nullish 操作符,它可以帮助开发者更好地处理 null 或 undefined 值。在本文中,我们将深入探讨 nullish 操作符的概念、用法和示例代码,并为您提供指导意义。

什么是 nullish 操作符?

在 JavaScript 中,当我们使用 || 操作符时,如果第一个操作数为 falsy 值(例如 null 或 undefined),它将返回第二个操作数。这通常是不希望发生的行为。例如,假设我们有以下代码:

----- --- - ---- -- ----------
----------------- -- ---------

在这种情况下,我们期望 foo 的值为 null,但实际上它是 'default'。这是因为 || 操作符将 null 解释为 falsy 值,因此它返回了默认值。

为了解决这个问题,ECMAScript 2021 引入了 nullish 操作符 ??。与 || 操作符不同,nullish 操作符只有在第一个操作数为 null 或 undefined 时才返回第二个操作数。如果第一个操作数为其他 falsy 值(例如 0 或 ''),则它将返回第一个操作数。

以下是一个使用 nullish 操作符的示例:

----- --- - ---- -- ----------
----------------- -- ----

在这种情况下,foo 的值为 null,因为 nullish 操作符仅在第一个操作数为 null 或 undefined 时返回第二个操作数。

如何使用 nullish 操作符?

使用 nullish 操作符非常简单。只需在代码中使用 ?? 运算符即可。以下是一个使用 nullish 操作符的示例:

----- --- - ---- -- ----------
----------------- -- ----

在这个例子中,foo 的值为 null,因为第一个操作数为 null。

您还可以使用 nullish 操作符来设置默认值。例如,假设我们有一个函数,它接受一个可选的参数:

-------- ----------- -
  ----- -------- - ------- ------ -- -----------
  ----------------------
-

-------------- -- ------- ------
------------ -- ------- -------
----------------- -- ------- -------

在这个例子中,我们使用 nullish 操作符来检查 name 参数是否为 null 或 undefined。如果是,我们使用默认值 'World'。

nullish 操作符与 || 操作符的区别

虽然 nullish 操作符和 || 操作符都可以用于设置默认值,它们之间有一些重要的区别。

首先,nullish 操作符仅在第一个操作数为 null 或 undefined 时返回第二个操作数。如果第一个操作数为其他 falsy 值(例如 0 或 ''),则它将返回第一个操作数。相比之下,|| 操作符会将 null、undefined、0、'' 和 false 等值解释为 falsy 值,并返回第二个操作数。

其次,nullish 操作符的优先级低于 || 操作符。这意味着如果我们在同一个表达式中使用这两个操作符,|| 操作符将首先执行。例如,假设我们有以下代码:

----- --- - ---- -- --------- -- ----------
----------------- -- ---------

在这种情况下,|| 操作符首先执行,并返回 undefined。然后,nullish 操作符将 undefined 解释为 falsy 值,并返回 'default'。

总结

在 ECMAScript 2021 中,nullish 操作符是一个非常有用的新特性,它可以帮助开发者更好地处理 null 或 undefined 值。与 || 操作符不同,nullish 操作符只有在第一个操作数为 null 或 undefined 时才返回第二个操作数。使用 nullish 操作符非常简单,只需在代码中使用 ?? 运算符即可。请记住,nullish 操作符的优先级低于 || 操作符,因此请小心使用它们。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6602d29ed10417a222ea5c96