如何使用 ES12 中的链式 Nullish 运算符解决 JS 的 Falsy 值问题

引言

在编程语言中,Truthy 和 Falsy 值是经常被提及的概念。在 JavaScript 中,Fasly 值包括空字符串 ''、undefined、null、0、NaN 和 false。通过使用逻辑或或逻辑与操作符,可以将 Falsy 值转换为非 Falsy 值。但是,使用逻辑或或逻辑与操作符会带来一些问题,比如对于字符串 “false”(一个非零长度的字符串)会被错误地视为真值。近年来,ES12 中新增了一个链式 Nullish 运算符,可以帮助解决这个问题。本文将介绍如何使用这个新特性来解决这个问题。

问题

让我们看一下下面的代码:

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

这段代码的目的是将变量 foo 的值赋给变量 bar。如果 foo 的值是 Falsy 值,则使用字符串 'bar' 赋值给变量 bar。但是实际上,变量 bar 将总是赋值为 'bar',因为变量 foo 的值是空字符串 '',这是 Falsy 值。

解决方法

在 ES12 中,引入了一种新运算符 ??,叫做 nullish 运算符。该运算符只有在变量为 null 或 undefined 时才返回 false,其它 Falsy 值(比如 0 或 '')都会被视为真值。

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

在这个例子中,使用 nullish 运算符,变量 bar 将被赋值为空字符串 ''。这是正确的结果,因为变量 foo 的值是 Falsy 值。使用逻辑或运算符,变量 bar 将被错误地赋值为字符串 'bar'。

除此之外,ES12 也支持链式 nullish 运算符,语法为 ??.,可以在一个变量可能是 null 或 undefined 这种情况下,访问该变量的属性或者方法,保证代码的可靠性。

来看一个示例:

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

在这个例子中,变量 result1 的值为字符串 ' ',因为变量 obj.foo.bar 的值是空字符串 ''。变量 result2 的值也是空字符串,但是它是通过使用链式 nullish 运算符来生成的。

结论

链式 nullish 运算符是 ES12 中的一个非常有用的特性,可以帮助我们解决在 JavaScript 中处理 Falsy 值的问题。它可以在变量可能是 null 或 undefined 的情况下访问一个变量的属性或方法。在使用该运算符时,我们可以避免使用传统的逻辑或操作符,并且在访问可能包含 Falsy 值的值时,更加可靠。这个特性能够帮助我们提高开发效率,减少错误,并改进代码的可读性。

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