推荐答案
JavaScript 中的空值合并运算符 ??
用于在左侧的操作数为 null
或 undefined
时返回右侧的操作数,否则返回左侧的操作数。它提供了一种简洁的方式来为变量设置默认值,仅在变量为 null
或 undefined
时才使用默认值。
与逻辑或运算符 ||
的主要区别在于 ||
会将 falsy
值(例如:0
,''
,NaN
,false
,null
,undefined
)视为需要返回右侧操作数的情况,而 ??
仅在左侧操作数为 null
或 undefined
时才返回右侧的操作数。这意味着 ??
对 0
或空字符串等“有效”的 falsy
值不会生效。
例如:
-- -------------------- ---- ------- --- ---- - ----- --- ----------- - -------- --- ----------- - ---- -- ------------ -- ----------- ----- ------- --- ----- - -- --- ------------ - --- --- ------------ - ----- -- ------------- -- ------------ ----- ---- - -- ---- - --------- --- ---- - --- --- ----------- - -------- ------ --- ----------- - ---- -- ------------ -- ----------- ----- ----------- ---- - --------- --- ------ - --- --- ------------- - -------- ------ --- ------------- - ------ -- ------------- -- ------------- ----- -------- ------ -- -- - ----- -
本题详细解读
空值合并运算符 (??) 的作用
空值合并运算符 ??
是 ES2020 中引入的新特性。它的核心作用是为变量提供默认值,但仅当该变量的值为 null
或 undefined
时才使用默认值。
语法:
leftOperand ?? rightOperand
工作原理:
- 如果
leftOperand
的值为null
或undefined
,则表达式的结果为rightOperand
。 - 否则,表达式的结果为
leftOperand
。
使用场景:
为可能为空的变量提供默认值: 当你从 API 或用户输入获取数据时,某些字段可能为空(
null
或undefined
)。使用??
可以轻松地提供默认值,避免出现错误。链式访问属性时的默认值: 可以与可选链式操作符
?.
结合使用,为深层嵌套属性访问提供默认值。
与逻辑或运算符 (||) 的区别
逻辑或运算符 ||
在 JavaScript 中也常用于设置默认值,但它与 ??
有关键区别:
||
的默认值判定:||
会将左侧操作数的falsy
值(0
,''
,NaN
,false
,null
,undefined
)视为需要返回右侧操作数的情况。??
的默认值判定:??
仅在左侧操作数为null
或undefined
时才返回右侧操作数。
示例对比:
-- -------------------- ---- ------- --- --------- - -- --- --------- - ----- --- ------------ - --- --------------------- -- -------------- -- -- -- --- - - ----- -- --------------------- -- -------------- -- -- - -- -- ---- - ---------- --------------------- -- -------------- -- -- -- --- ---- - ----- -- --------------------- -- -------------- -- -- -- --- ---- - ---- - ----------
何时选择 ??
或 ||
:
使用
??
: 当你只想处理null
或undefined
的情况,并且希望将0
,''
,false
等falsy
值视为有效值时。使用
||
: 当你希望将所有falsy
值都视为需要提供默认值的情况时。例如,需要一个值在为空字符串或者null时返回默认值,此时可以使用||
总结:
??
是一个更严格的默认值运算符,它避免了 ||
在处理 falsy
值时可能出现的意外行为。在现代 JavaScript 开发中,推荐使用 ??
来为 null
或 undefined
的变量设置默认值,它能更精确的表达我们的意图,使代码更清晰。