回顾 ECMAScript 2020

98 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情

ECMAScript 2020

最初的JavaScript版本号是ES5(2009)和ES6(2015)。从2016年开始,版本按年份命名:ECMAScript 2016、2017、2018、2019。 本章介绍 ECMAScript 2020 中的新特性:

String.prototype.matchAll()

返回一个包含所有匹配正则表达式的结果及分组捕获组的迭代器

RegExp必须是设置了全局模式g的形式,否则会抛出异常TypeError

示例

const regexp = /t(e)(st(\d?))/g;
const str = 'test1test2';

const array = [...str.matchAll(regexp)];

console.log(array[0]);
// expected output: Array ["test1", "e", "st1", "1"]

console.log(array[1]);
// expected output: Array ["test2", "e", "st2", "2"]

Promise.allSettled()

  • Promise.allSettled() 方法返回一个在所有给定的 promise
    • 已经fulfilledrejected后的 promise
    • 并带有一个对象数组,每个对象表示对应的 promise 结果。

相比之下,Promise.all() 更适合彼此相互依赖或者在其中任何一个reject时立即结束。

示例

const promise1 = Promise.resolve(3);
const promise2 = new Promise((resolve, reject) => setTimeout(reject, 100, 'foo'));
const promises = [promise1, promise2];

Promise.allSettled(promises).
  then((results) => results.forEach((result) => console.log(result)));

// 输出
// {status: 'fulfilled', value: 3}
// {status: 'rejected', reason: 'foo'}

BigInt

  • 一种内置对象,它提供了一种方法来表示大于 2^53 - 1 的整数
  • BigInt 可以表示任意大的整数
  • 使用 typeof 测试时, BigInt 对象返回 "bigint"

空值合并运算符(??)

  • 是一个逻辑运算符

  • 当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数

  • 或运算符(||)的区别:

    • 或运算符会在左侧操作数为 假值 时返回右侧操作数
  • ?? 直接与 AND(&&)和 OR(||)运算符组合使用是不可取的

    • 是因为空值合并运算符和其他逻辑运算符之间的运算优先级/运算顺序是未定义的)这种情况下会抛出 SyntaxError

举个栗子:

const foo = null ?? 'default string';
console.log(foo); // "default string"

const baz = 0 ?? 42;
console.log(baz); // output: 0

可选的链接操作符

  • 允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。
  • ?. 运算符的功能类似于 . 链式运算符,不同之处在于,在引用为空 (nullish ) (null 或者 undefined) 的情况下不会引起错误,该表达式短路返回值是 undefined
  • 与函数调用一起使用时,如果给定的函数不存在,则返回 undefined

有了这个方法之后:

let nestedProp = obj.first && obj.first.second;

就可以优化为:

let nestedProp = obj?.first?.second;