持续创作,加速成长!这是我参与「掘金日新计划 · 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- 已经
fulfilled或rejected后的 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"
空值合并运算符(??)
-
是一个逻辑运算符
-
与
或运算符(||)的区别:或运算符会在左侧操作数为 假值 时返回右侧操作数
-
将
??直接与 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;