在 ECMAScript 2020 中,新增了一个 Nullish 合并操作符(Nullish Coalescing Operator),它可以帮助我们更方便地处理变量值为 null 或 undefined 的情况。本文将介绍 Nullish 合并操作符的使用方法,以及它的一些注意点。
Nullish 合并操作符的作用
在 JavaScript 中,我们经常需要判断一个变量是否为 null 或 undefined,然后才能进行下一步操作。例如:
let foo = null; let bar = undefined; let baz = foo || 'default'; // baz 的值为 'default' let qux = bar || 'default'; // qux 的值为 'default'
在上面的代码中,我们使用了逻辑或操作符(||)来判断变量的值是否为 null 或 undefined。如果是,就使用默认值。但是,逻辑或操作符有一个缺点,就是当变量的值为 falsy 值时(比如 0、''、false 等),也会使用默认值,这不是我们想要的。
Nullish 合并操作符就是为了解决这个问题而生的。它只有在变量的值为 null 或 undefined 时,才会使用默认值。例如:
let foo = null; let bar = undefined; let baz = foo ?? 'default'; // baz 的值为 'default' let qux = bar ?? 'default'; // qux 的值为 'default'
在上面的代码中,我们使用了 Nullish 合并操作符(??),它只有在变量的值为 null 或 undefined 时,才会使用默认值。
Nullish 合并操作符的注意点
虽然 Nullish 合并操作符看起来很简单,但是有一些需要注意的地方。
1. 优先级
Nullish 合并操作符的优先级比逻辑或操作符低,比三元表达式高。例如:
let foo = null; let bar = undefined; let baz = foo ?? 'default' || 'fallback'; // baz 的值为 'default' let qux = bar ?? 'default' ? 'yes' : 'no'; // 抛出语法错误
在上面的代码中,我们使用了逻辑或操作符和三元表达式来演示优先级的问题。由于 Nullish 合并操作符的优先级比逻辑或操作符低,所以在第一个表达式中,先执行了逻辑或操作符,导致默认值被覆盖了。而在第二个表达式中,由于 Nullish 合并操作符的优先级比三元表达式高,所以报错了。
2. 只能检查 null 和 undefined
Nullish 合并操作符只能检查变量的值是否为 null 或 undefined,不能检查其它 falsy 值。例如:
let foo = ''; let bar = 0; let baz = foo ?? 'default'; // baz 的值为 '' let qux = bar ?? 'default'; // qux 的值为 0
在上面的代码中,我们使用了 Nullish 合并操作符来检查变量的值是否为 null 或 undefined,但是它并不能检查变量的值是否为 '' 或 0。
总结
Nullish 合并操作符是 ECMAScript 2020 中新增的一个操作符,它可以帮助我们更方便地处理变量值为 null 或 undefined 的情况。但是,需要注意它的优先级和只能检查 null 和 undefined 的限制。在实际开发中,我们可以根据具体情况来选择使用逻辑或操作符还是 Nullish 合并操作符。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65d708721886fbafa44a08ca