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 月 |