请解释 JavaScript 中的空值合并运算符 (??) 的作用和用法。它与逻辑或运算符 (||) 有什么区别?

推荐答案

JavaScript 中的空值合并运算符 ?? 用于在左侧的操作数为 nullundefined 时返回右侧的操作数,否则返回左侧的操作数。它提供了一种简洁的方式来为变量设置默认值,仅在变量为 nullundefined 时才使用默认值。

与逻辑或运算符 || 的主要区别在于 || 会将 falsy 值(例如:0''NaNfalsenullundefined)视为需要返回右侧操作数的情况,而 ?? 仅在左侧操作数为 nullundefined 时才返回右侧的操作数。这意味着 ??0 或空字符串等“有效”的 falsy 值不会生效。

例如:

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

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

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

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

本题详细解读

空值合并运算符 (??) 的作用

空值合并运算符 ?? 是 ES2020 中引入的新特性。它的核心作用是为变量提供默认值,但仅当该变量的值为 nullundefined 时才使用默认值。

语法:

工作原理:

  1. 如果 leftOperand 的值为 nullundefined,则表达式的结果为 rightOperand
  2. 否则,表达式的结果为 leftOperand

使用场景:

  • 为可能为空的变量提供默认值: 当你从 API 或用户输入获取数据时,某些字段可能为空(nullundefined)。使用 ?? 可以轻松地提供默认值,避免出现错误。

  • 链式访问属性时的默认值: 可以与可选链式操作符 ?. 结合使用,为深层嵌套属性访问提供默认值。

与逻辑或运算符 (||) 的区别

逻辑或运算符 || 在 JavaScript 中也常用于设置默认值,但它与 ?? 有关键区别:

  • || 的默认值判定: || 会将左侧操作数的 falsy 值(0''NaNfalsenullundefined)视为需要返回右侧操作数的情况。
  • ?? 的默认值判定: ?? 仅在左侧操作数为 nullundefined 时才返回右侧操作数。

示例对比:

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

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

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

何时选择 ??||:

  • 使用 ??: 当你只想处理 nullundefined 的情况,并且希望将 0''falsefalsy 值视为有效值时。

  • 使用 ||: 当你希望将所有 falsy 值都视为需要提供默认值的情况时。例如,需要一个值在为空字符串或者null时返回默认值,此时可以使用||

总结:

?? 是一个更严格的默认值运算符,它避免了 || 在处理 falsy 值时可能出现的意外行为。在现代 JavaScript 开发中,推荐使用 ?? 来为 nullundefined 的变量设置默认值,它能更精确的表达我们的意图,使代码更清晰。

纠错
反馈