ECMAScript 2020
JavaScript 版本号
旧的 ECMAScript 版本使用数字命名:ES5 和 ES6。
从 2016 年起,版本按年份命名:ES2016、2018、2020……
ES2020 中的新功能
- BigInt
- String matchAll()
- 空值合并运算符 (??)
- 可选链运算符 (?.)
- 逻辑与赋值运算符 (&&=)
- 逻辑或赋值运算符 (||=)
- 空值合并赋值运算符 (??=)
- Promise.allSettled()
- 动态导入
警告
这些功能相对较新。
旧版浏览器可能需要替代代码(Polyfill)。
JavaScript BigInt
JavaScript BigInt
变量用于存储无法由普通 JavaScript Number
表示的大整数值。
JavaScript 整数的精度最多约为 15 位。
整数示例
let x = 999999999999999;
let y = 9999999999999999; // 太大了
自己动手试一试 »
BigInt 示例
let x = 9999999999999999;
let y = 9999999999999999n;
自己动手试一试 »
要创建 BigInt
,请在整数末尾添加 n 或调用 BigInt()
JavaScript BigInt
的 typeof
是 "bigint"
BigInt
自 2020 年 9 月以来在所有现代浏览器中都得到支持
Chrome 67 | Edge 79 | Firefox 68 | Safari 14 | Opera 54 |
2018 年 5 月 | 2020 年 1 月 | 2019 年 7 月 | 2020 年 9 月 | 2018 年 6 月 |
JavaScript String matchAll()
在 ES2020 之前,没有字符串方法可以用来在字符串中搜索所有出现的子字符串。
如果参数是正则表达式,则必须设置全局标志 (g),否则会抛出 TypeError。
如果要进行不区分大小写的搜索,则必须设置不区分大小写标志 (i)
注意
ES2021 引入了字符串方法 replaceAll()。
空值合并运算符 (??)
??
运算符如果第一个参数不是空值(null
或 undefined
),则返回第一个参数。
否则返回第二个。
空值运算符自 2020 年 3 月以来在所有现代浏览器中都得到支持
Chrome 80 | Edge 80 | Firefox 72 | Safari 13.1 | Opera 67 |
2020 年 2 月 | 2020 年 2 月 | 2020 年 1 月 | 2020 年 3 月 | 2020 年 3 月 |
可选链运算符 (?.)
可选链运算符 如果对象为 undefined
或 null
,则返回 undefined
(而不是抛出错误)。
`?.=` 运算符自 2020 年 3 月以来在所有现代浏览器中都得到支持
Chrome 80 | Edge 80 | Firefox 74 | Safari 13.1 | Opera 67 |
2020 年 2 月 | 2020 年 2 月 | 2020 年 3 月 | 2020 年 3 月 | 2020 年 3 月 |
`&&=` 运算符
逻辑与赋值运算符 在两个值之间使用。
如果第一个值为 true
,则将第二个值赋给它。
`&&=` 运算符自 2020 年 9 月以来在所有现代浏览器中都得到支持
Chrome 85 | Edge 85 | Firefox 79 | Safari 14 | Opera 71 |
2020 年 8 月 | 2020 年 8 月 | 2020 年 3 月 | 2020 年 9 月 | 2020 年 9 月 |
`||=` 运算符
逻辑或赋值运算符 在两个值之间使用。
如果第一个值为 false
,则将第二个值赋给它。
`||=` 运算符自 2020 年 9 月以来在所有现代浏览器中都得到支持
Chrome 85 | Edge 85 | Firefox 79 | Safari 14 | Opera 71 |
2020 年 8 月 | 2020 年 8 月 | 2020 年 3 月 | 2020 年 9 月 | 2020 年 9 月 |
`??=` 运算符
空值合并赋值运算符 在两个值之间使用。
如果第一个值为 undefined
或 null
,则将第二个值赋给它。
`??=` 运算符自 2020 年 9 月以来在所有现代浏览器中都得到支持
Chrome 85 | Edge 85 | Firefox 79 | Safari 14 | Opera 71 |
2020 年 8 月 | 2020 年 8 月 | 2020 年 3 月 | 2020 年 9 月 | 2020 年 9 月 |
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)),
);
自己动手试一试 »
`Promise.allSettled()` 自 2020 年 3 月以来在所有现代浏览器中都得到支持
Chrome 76 | Edge 79 | Firefox 71 | Safari 13 | Opera 63 |
2019 年 5 月 | 2019 年 11 月 | 2020 年 3 月 | 2019 年 9 月 | 2019 年 8 月 |