ECMAScript 2020
JavaScript 版本號
舊的 JS 版本以數字命名:ES5 (2009) 和 ES6 (2015)。
從 2016 年開始,版本按年份命名:ECMAScript 2016、2017、2018、2019、...
ES2020 中的新特性:
- BigInt
- 字符串方法 matchAll()
- 空值合并運算符 (??)
- 可選鏈運算符 (?.)
- 邏輯 AND 賦值運算符 (&&=)
- 邏輯 OR 賦值運算符 (||=)
- 空值合并賦值運算符 (??=)
- Promise.allSettled()
- 動態導入
警告
這些特性相對較新。
較舊的瀏覽器可能需要替代代碼(Polyfill)。
JavaScript BigInt
JavaScript BigInt 變量用于存儲太大而無法用普通 JavaScript 數字表示的大整數值。
JavaScript 整數最多只能精確到 15 位數字。
Integer 實例
let x = 999999999999999; let y = 9999999999999999; // 太大
BigInt 實例
let x = 9999999999999999; let y = 9999999999999999n;
如需創建 BigInt,請將 n
附加到整數末尾或調用 BigInt():
實例
let x = 1234567890123456789012345n; let y = BigInt(1234567890123456789012345)
BigInt 的 JavaScript 類型是 "bigint":
實例
let x = BigInt(999999999999999); let type = typeof x;
自 2020 年 9 月以來,所有現代瀏覽器都支持 BigInt:
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 67 | Edge 79 | Firefox 68 | Safari 14 | Opera 54 |
2018 年 5 月 | 2020 年 1 月 | 2019 年 7 月 | 2020 年 9 月 | 2018 年 6 月 |
JavaScript 字符串方法 matchAll()
在 ES2020 之前,沒有字符串方法方法可用于搜索字符串中所有出現的字符串。
實例
const iterator = text.matchAll("Cats");
如果參數是正則表達式,則必須設置全局標志 (g
),否則會拋出 TypeError。
實例
const iterator = text.matchAll(/Cats/g);
如果要進行不區分大小寫的搜索,則必須設置不區分大小寫標志 (i
):
實例
const iterator = text.matchAll(/Cats/gi);
提示:ES2021 引入了字符串方法 replaceAll()。
空值合并運算符(Nullish Coalescing Operator)(?? 運算符)
如果第一個參數不是空值(null
或 undefined
),則 ??
運算符返回第一個參數。
否則返回第二個。
實例
let name = null; let text = "missing"; let result = name ?? text;
自 2020 年 3 月以來,所有現代瀏覽器都支持 nullish 運算符:
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 80 | Edge 80 | Firefox 72 | Safari 13.1 | Opera 67 |
2020 年 2 月 | 2020 年 2 月 | 2020 年 1 月 | 2020 年 3 月 | 2020 年 3 月 |
可選鏈運算符(Optional Chaining Operator)(?. 運算符)
如果對象為 undefined
或 null
,則可選鏈運算符返回 undefined
(而不是拋出錯誤)。
實例
const car = {type:"Fiat", model:"500", color:"white"}; let name = car?.name;
自 2020 年 3 月以來,所有現代瀏覽器都支持 ?.=
運算符:
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 80 | Edge 80 | Firefox 74 | Safari 13.1 | Opera 67 |
2020 年 2 月 | 2020 年 2 月 | 2020 年 3 月 | 2020 年 3 月 | 2020 年 3 月 |
邏輯 AND 賦值運算符(&&= 運算符)
邏輯 AND 賦值運算符用于兩個值之間。
如果第一個值為 true
,則分配第二個值。
邏輯 AND 賦值實例
let x = 100; x &&= 5;
自 2020 年 9 月以來,所有現代瀏覽器都支持 &&=
運算符:
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 85 | Edge 85 | Firefox 79 | Safari 14 | Opera 71 |
2020 年 8 月 | 2020 年 8 月 | 2020 年 3 月 | 2020 年 9 月 | 2020 年 9 月 |
邏輯 OR 賦值運算符(||= 運算符)
邏輯 OR 賦值運算符用于兩個值之間。
如果第一個值為 false
,則分配第二個值。
邏輯 OR 賦值實例
let x = 10; x ||= 5;
自 2020 年 9 月以來,所有現代瀏覽器都支持 ||=
運算符:
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 85 | Edge 85 | Firefox 79 | Safari 14 | Opera 71 |
2020 年 8 月 | 2020 年 8 月 | 2020 年 3 月 | 2020 年 9 月 | 2020 年 9 月 |
空值合并賦值運算符(??= 運算符)
空值合并賦值運算符(Nullish Coalescing Assignment Operator)用于兩個值之間。
如果第一個值 undefined
或為 null
,則分配第二個值。
空值合并賦值實例
let x = 10; x ??= 5;
自 2020 年 9 月以來,所有現代瀏覽器都支持 ??=
運算符:
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 85 | Edge 85 | Firefox 79 | Safari 14 | Opera 71 |
2020 年 8 月 | 2020 年 8 月 | 2020 年 3 月 | 2020 年 9 月 | 2020 年 9 月 |