随着前端技术的不断发展,ECMAScript 2020 (ES11) 新特性已经发布,其中包含了一些非常实用的新特性,本文将介绍其中的三个:nullish coalescing、Optional Chaining和Promise.allSettled。
Nullish Coalescing
在 JavaScript 中,我们经常使用 || 运算符来进行默认值的设置,例如:
const name = person.name || 'Unknown';
但是,如果 person.name 的值为 false、0、''、null、undefined 或者 NaN,那么上述代码将会返回 'Unknown',这并不是我们想要的结果。
为了解决这个问题,ES11 引入了 nullish coalescing 运算符 ??,它只在左侧的操作数为 null 或 undefined 时才会返回右侧的操作数,例如:
const name = person.name ?? 'Unknown';
这样,当 person.name 的值为 false、0、'' 或者 NaN 时,name 的值将为 person.name 的值。
Optional Chaining
在 JavaScript 中,当我们需要访问一个对象的属性时,我们通常会使用点运算符 .,例如:
const name = person.name;
但是,如果 person 对象不存在,那么上述代码将会抛出错误。
为了解决这个问题,ES11 引入了 Optional Chaining 运算符 ?.,它可以在访问对象属性时避免抛出错误,例如:
const name = person?.name;
这样,当 person 对象不存在时,name 的值将为 undefined。
Promise.allSettled
在 JavaScript 中,Promise.all 可以用来等待多个 Promise 对象的完成,例如:
Promise.all([promise1, promise2, promise3]) .then(([result1, result2, result3]) => { // ... });
但是,如果其中一个 Promise 对象发生了错误,Promise.all 将会抛出错误并停止执行。
为了解决这个问题,ES11 引入了 Promise.allSettled,它可以等待所有 Promise 对象的状态都被 resolved 或者 rejected,并返回一个包含所有 Promise 对象的状态的数组,例如:
Promise.allSettled([promise1, promise2, promise3]) .then(([result1, result2, result3]) => { // ... });
这样,即使其中一个 Promise 对象发生了错误,Promise.allSettled 也会等待所有 Promise 对象的完成,并返回一个包含所有 Promise 对象的状态的数组。
总结
以上是 ECMAScript 2020 (ES11) 中的三个新特性:nullish coalescing、Optional Chaining 和 Promise.allSettled。它们都非常实用,可以帮助我们更好地编写 JavaScript 代码。
在实际开发中,我们应该根据具体情况选择使用哪一个新特性,并且应该注意它们的兼容性问题,以确保代码能够在各种浏览器和环境中正常运行。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65d54099add4f0e0ffd04986