在 JavaScript 的开发中,我们经常需要判断一个变量是否存在并且是否有值,以此来控制程序的行为。在之前的版本中,我们需要使用繁琐的条件语句来进行判断,比如使用三目运算符。而在 ECMAScript 2020 中提供了一种新的语法特性,即空值合并运算符(nullish coalescing operator),可以更加方便地处理变量的值缺失和默认值的问题。
概念与用法
空值合并运算符使用两个??
来表示,其作用在于当左操作数的值为 null 或者 undefined 时,取右操作数的值,否则取左操作数的值。例如:
----- - - ---------- ----- - - ----- ----- - - ------ ----- ------- - - -- - -- -- -- ----- ----- ------- - - -- - -- -- -- ----- ----- ------- - - -- - -- -- -- -----
在上面的例子中,当变量 a
和 b
的值为 null 或 undefined 时,空值合并运算符就会返回右操作数 c
的值。
这种语法特性在实际开发中非常实用,比如我们可以用它来给函数传参设置默认值:
-------- ----------- - ----- -------- - ---- -- ------------ ---------------- --------------- - -------- -- --- ---------- ------------ -- --- ---------- --------------- -- --- ------
上面的代码中,当 name
未定义或者为 null 时,空值合并运算符会取 "Anonymous"
作为默认值。
与或运算符的区别
在 JavaScript 中,或运算符 ||
也可以实现类似的功能,即取两个操作数的第一个真值(truthy)的值。例如:
----- - - ---------- ----- - - ----- ----- - - ------ ----- ------- - - -- - -- -- -- ----- ----- ------- - - -- - -- -- -- ----- ----- ------- - - -- - -- -- -- -----
然而,在某些情况下,或运算符会产生预料之外的结果。当左操作数的值为假值(falsy)时,或运算符会返回右操作数的值,而不是左操作数的值。下面是一个例子:
----- - - --- ----- - - ------ ----- - - ------ ----- ------ - - -- - -- -- -- -----
在这个例子中,变量 a
的值为空字符串,是一种假值。因此第一个操作数为假值,或运算符返回了第二个操作数 b
的值。如果我们希望当 a
的值为空字符串时依然返回 a
的值,就不能使用或运算符了。
与或运算符不适用于 null 或 undefined 的判断,因为空值合并运算符只有在左右两个操作数都为 null 或 undefined 时才会返回右操作数的值。例如:
----- --- - - ----- ---- -- ----- ------ - -------- -- ---------- -- --------- ----- ------- - -------- -- ---------- -- ----
总结
空值合并运算符是 ECMAScript 2020 中的一个新特性,它使处理变量的值缺失和默认值的问题变得更加方便和优雅。与或运算符可以实现类似的功能,但在某些情况下会产生意料之外的结果。在实际应用中,我们应该选择恰当的语法特性来处理变量的值缺失和默认值的问题,以提高代码的可读性和健壮性。
参考文献
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/647be168968c7c53b0726c04