什么是 Nullish coalescing operator?
Nullish coalescing operator 是 ES12 中新增的一个运算符,用来处理某些情况下 undefined 或 null 值的合并问题。它的语法为 ??
,表示如果左侧的表达式的值为 null
或 undefined
,则返回右侧的默认值。否则返回左侧的表达式结果。
与此相对应的是逻辑或(||
)运算符。当左侧的表达式的值为 falsy 值(false
、null
、0
、""
、NaN
、undefined
)时,逻辑或运算符会返回右侧的默认值。但当左侧的表达式的值为 null
或 undefined
时,逻辑或运算符也会返回右侧的默认值。
因此,在涉及到 null
或 undefined
值的处理中,使用 Nullish coalescing operator 更为严谨和准确。
如何使用 Nullish coalescing operator?
Nullish coalescing operator 可以用于任何类型的值。
假设我们有一个变量 foo
:
const foo = null;
我们想要在该变量值为 null
或 undefined
时返回一个默认值,否则返回变量本身。可以使用 Nullish coalescing operator,如下所示:
const result = foo ?? "default value"; console.log(result); // 输出 "default value"
当 foo
为 null
或 undefined
时,result
的值为 "default value";否则,result
的值为 foo
的值(在本例中为 null
)。
当然,在表达式左侧可以是任何类型的值,例如布尔值:
const bar = false; const result2 = bar ?? "default value"; console.log(result2); // 输出 false
Nullish coalescing operator 的优先级
Nullish coalescing operator 与逻辑或运算符在语义上有些相似,但它们的优先级是不同的。具体来说:
- Nullish coalescing operator 的优先级比逻辑或运算符低。
- 在使用时,应该将整个表达式用括号括起来,以避免出现优先级问题。
例如,考虑下面的代码:
const baz = null || "default value"; console.log(baz); // 输出 "default value"
这个代码使用了逻辑或运算符,在表达式左侧的值为 null
时会返回右侧的默认值。但是当变量 baz
的值为 0
时,就会出现问题。因为 0
是一个 falsy 值,所以逻辑或运算符也会返回 "default value",这并不是我们想要的结果。
因此,在处理可能出现 falsy 值的情况时,Nullish coalescing operator 更为可靠。例如,下面的代码:
const baz = null ?? "default value"; console.log(baz); // 输出 null
当值为 0
时,返回的结果也是正确的:
const qux = 0 ?? "default value"; console.log(qux); // 输出 0
需要注意的是,由于运算符优先级的问题,在使用 Nullish coalescing operator 时一定要加上括号:
const result = (foo ?? bar) ?? "default value";
总结
Nullish coalescing operator 是 ES12 中新增的一个运算符,用来处理 undefined 或 null 值的合并问题。它比逻辑或运算符更为严谨和准确,在处理可能出现 falsy 值的情况时使用更为可靠。需要注意,Nullish coalescing operator 的优先级比逻辑或运算符低,使用时应该加上括号以避免出现优先级问题。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6455873d968c7c53b0905326