ES12 中的空值合并运算符及其使用案例

阅读时长 5 分钟读完

在 JavaScript 中,我们经常会遇到处理空值的情况。例如,当我们从后端获取数据时,有些属性可能为空,而我们不希望在使用这些属性时遇到 undefinednull,因为这往往会导致程序崩溃或出现错误。

为了解决这个问题,ES12 中引入了一个新的运算符:空值合并运算符(nullish coalescing operator),它可以方便地处理空值情况,使我们的程序更加健壮。

空值合并运算符的语法

空值合并运算符的语法非常简单,它使用两个问号(??)表示:

它的意义是:如果 value1 不是 undefinednull,则使用 value1,否则使用 value2

空值合并运算符的示例

下面是一个使用空值合并运算符的简单示例,它演示了怎样使用空值合并运算符来处理变量可能为 undefinednull 的情况:

在上面的代码中,我们使用 ?? 运算符来确保 foobar 始终被赋予一个默认值,即 'default'

而对于 baz,因为其值不是 undefinednull,所以直接使用其本身的值。

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

在使用空值合并运算符时,有些人可能会认为它与逻辑或运算符(||)的功能相似,但实际上它们是有区别的。

在 JavaScript 中,当使用逻辑或运算符时,如果左侧的表达式为假值(false0''nullundefinedNaN),则返回右侧的值。

而使用空值合并运算符时,只有左侧的值为 undefinednull 时,才会使用右侧的值。

下面是一个说明两者区别的示例:

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

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

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

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

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

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

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

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

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

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

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

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

在上面的代码中,我们可以看到,在使用逻辑或运算符时,只有在左侧的值是假值时,才会使用右侧的值;而在使用空值合并运算符时,只有在左侧的值是 undefinednull 时,才会使用右侧的值。

如何在实践中使用空值合并运算符

在实践中,我们可以使用空值合并运算符来简化代码,避免出现 undefinednull 异常。

例如,当我们从后端获取数据时,有些属性可能为空,我们可以使用空值合并运算符来确保属性值非空,从而避免程序崩溃或出现错误:

在上面的代码中,我们使用了空值合并运算符来确保 nameage 变量的值非空。如果 data 对象的 nameage 属性为空,它们的值将会被设置为 'Unknown'

总结

空值合并运算符是 ES12 中引入的一个新的运算符,它可以帮助我们处理可能为空值的情况,使我们的程序更加健壮。

它与逻辑或运算符的区别在于:逻辑或运算符在左侧值为假值时,才会使用右侧值;而空值合并运算符只有在左侧值为 undefinednull 时,才会使用右侧值。

在实践中,我们可以使用空值合并运算符来简化代码,避免出现 undefinednull 异常,从而使程序更加健壮。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/650027f695b1f8cacde5a41b

纠错
反馈