引言
在编程语言中,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