ES2020 新增的 Nullish Coalescing Operator(空值合并运算符)详解

在以往的 JavaScript 编程中,我们常常使用逻辑运算符来检查并处理空值情况。而从 ES2020 开始,Nullish Coalescing Operator(空值合并运算符)被正式引入其中,可以更加简练和优雅地进行空值判断与合并。

空值合并运算符的用法

在语法方面,空值合并运算符使用两个问号(??)表示,其作用是判断某个值是否为 null 或 undefined,如果是则返回另一个值,否则返回原来的值。

具体来说,其使用方式为:

如果 value1 不为 null 或 undefined,则返回 value1;否则返回 value2。实际上,这也是空值合并运算符的主要功能所在。在许多情况下,我们需要对变量或表达式的值进行判断,如果它们有一个默认值,那么可以使用空值合并运算符,以此减少代码量并提高可读性。

举个例子:

如上所示,当 foo 为 null 时,空值合并运算符将返回它的备选值 bar,而当 foo 不为 null 时,则直接返回其本身。这种表达式的运算结果将取决于 foo 的值,代码的可读性也相比于 foo ? foo : bar 更加简明易懂。

在一些函数调用时,这也可以很好地避免各种非空判断带来的麻烦。比如下面这个例子:

这个函数使用空值合并运算符,将 username 的值与 "guest" 相比较。如果 username 为 null 或 undefined,则返回 "guest";否则返回它的值。这样,我们就不用在函数中再进行一次冗余的非空判断操作,提高了代码的可读性和编写效率。

空值合并运算符与逻辑运算符的区别

前面提到过,在 JavaScript 的编程中,我们通常使用逻辑运算符(如 ||)来判断变量或者表达式的值是否为空。但是,我们也需要知晓空值合并运算符与逻辑运算符之间的区别。

空值合并运算符只有在左侧的值为 null 或 undefined 时才会进行右侧的运算。而逻辑运算符会对左侧的值进行类型转换,因此可能会得到一个不是布尔类型的值。具体来说,或运算符 || 只要左侧的值为假值,就会返回右侧的值。空字符串、数字 0、false 或 null 都是假值,但是 undefined 是一个特殊的值。它在使用或运算符时会被强制转换成假值。下面代码字面输出了各个值变量使用或运算符运算的结果,可以更好地理解这一点:

从上面的代码可以看到,只要左侧的值不为假值,就会返回左侧的值本身。空字符串、0 和 false 都作为假值类型,undefined 和 null 也被认为是假的,因此返回右侧的默认值 "default"。

与之不同的是,空值合并运算符只会在左侧值为 null 或 undefined 时返回备选值。如果左侧的值为其他 falsy 类型,例如 0 或空字符串,那么仍然会返回原来的值而不是备选值,这与逻辑运算符的行为不同。看下这个示例,同样一段 code,不同函数使用不同的运算符,输出的结果却不同:

从上面的结果中,可以看到左侧值为 "" 时,逻辑运算符返回的是 "default",但是空值合并运算符却返回了空字符串本身。这就是两个运算符存在的一些根本的区别。

总结

空值合并运算符的引入,进一步提高了 JavaScript 的编程效率和可读性。它能够更加优雅地处理某些空值情况,并且避免了和逻辑运算符相比存在的隐患。在应用空值合并运算符时,要注意它的用法和语法,避免进行冗余的非空判断,使代码更简单易懂,提高了程序的可读性。

参考文献

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


纠错
反馈