js中的 a ?? b是什么意思?这个和|| 有何区别,哪个更好?
a ?? b 和 a || b 都可以用于提供默认值,但它们之间存在关键的区别:
-
Nullish Coalescing Operator (??):
- 只有当
a的值为null或undefined时,才会返回b。 - 如果
a是其他假值(如false、0、NaN、空字符串),a ?? b将返回a而不是b。
- 只有当
-
Logical OR Operator (||):
- 当
a的值为假值(包括null、undefined、false、0、NaN、空字符串)时,都会返回b。 - 这意味着使用
||时,即使变量的值是预期范围内的有效值(例如,a = false或a = ''),只要它被认为是逻辑上的“假”,也会返回b。
- 当
选择哪个运算符更好取决于具体场景:
-
如果你希望只有在变量严格未定义或为 null 时才使用默认值,那么
a ?? b更合适,因为它不会因为非空且非零的假值而意外地使用默认值。 -
如果你的意图是在任何假值情况下都提供一个备选值,包括但不限于
null和undefined,则应该使用a || b。
但需要注意的是,这可能会导致一些意料之外的行为,特别是在处理数字和布尔值时。

浙公网安备 33010602011771号