JavaScript 2020 新特性
JavaScript 2020 新特性
| 功能 | 描述 | |
|---|---|---|
| BigInt | 存储过大的值,无法用 JavaScript 数字存储 | |
| String matchAll() | 查找字符串中所有出现的字符串 | |
| Promise.allSettled() | 接受 Promise 作为输入,并返回单个 Promise | |
| 动态导入 |
2020 年新增 JavaScript 运算符
| 操作 | 描述 | |
|---|---|---|
| ?? | 空值合并操作返回第一个非空参数 | |
| ?. | 如果对象为 undefined 或 null,可选链操作返回 undefined | |
| &&= | 逻辑与赋值:如果第一个值为真,则赋值为第二个值 | |
| ||= | 逻辑或赋值:如果第一个值为假,则赋值为第二个值 | |
| ??= | 空值合并赋值:如果第一个值为未定义或空值,则赋值为第二个值 |
浏览器支持
自 2021 年 4 月起,所有现代浏览器均支持 ECMAScript 2020。
| Chrome 80 |
Edge 80 |
Firefox 80 |
Safari 14.1 |
Opera 67 |
| 2020年2月 | 2020年2月 | 2020年8月 | 2021年4月 | 2020年3月 |
JavaScript BigInt
JavaScript 的 BigInt 变量用于存储过大的整数值,这些值无法用普通的 JavaScript Number 变量表示。
JavaScript 整数的精度只有大约 15 位小数。
整数示例
let x = 999999999999999;
let y = 9999999999999999; // too big亲自试一试 »
BigInt 示例
let x = 9999999999999999;
let y = 9999999999999999n;亲自试一试 »要创建一个BigInt,请在整数末尾添加n,或调用BigInt():
JavaScript 中 typeof 和 BigInt 的类型是 "bigint":
JavaScript 字符串 matchAll()
在 ES2020 之前,没有一个字符串方法可以用来查找字符串中某个字符串的所有匹配项。
如果参数是正则表达式,则必须设置全局标志 (g),否则会抛出 TypeError 异常。
如果要进行不区分大小写的搜索,必须设置不区分大小写的标志 (i):
注意
ES2021 引入了字符串方法 replaceAll()。
空值合并运算符 (??)
??运算符在第一个参数不为空(null 或 undefined)时返回第一个参数。
否则返回第二个参数。
可选链运算符 (?.)
如果对象为 undefined 或 null,则 可选链运算符 返回 undefined(而不是抛出错误)。
&&= 运算符
逻辑与赋值运算符用于两个值之间。
如果第一个值为true,则将第二个值赋给第一个值。
||= 运算符
逻辑或赋值运算符用于两个值之间。
如果第一个值为false,则赋值为第二个值。
??= 运算符
空值合并赋值运算符用于两个值之间。
如果第一个值为 undefined 或 null,则将第二个值赋给它。
JavaScript Promise.allSettled()
Promise.allSettled() 方法从 Promise 列表中返回单个 Promise。
示例
// 创建一个 Promise
const myPromise1 = new Promise((resolve, reject) => {
setTimeout(resolve, 200, "King");
});
// 创建另一个 Promise
const myPromise2 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, "Queen");
});
// Settle All
Promise.allSettled([myPromise1, myPromise2]).then((results) =>
results.forEach((x) => myDisplay(x.status)),
);亲自试一试 »