ECMAScript 2022
JavaScript 版本號
舊的 ECMAScript 版本以數字命名:ES5 和 ES6。
從 2016 年開始,版本以年份命名:ES2016、2018、2020、2022。
ES2022 的新特性
警告:
這些特性相對較新。
舊版瀏覽器可能需要替代代碼(Polyfill)。
JavaScript Array at()
ES2022 引入了數組方法 at()
:
例子 1
獲取 fruits 數組的第三個元素:
const fruits = ["Banana", "Orange", "Apple", "Mango"]; let fruit = fruits.at(2);
例子 2
獲取 fruits 數組的第三個元素:
const fruits = ["Banana", "Orange", "Apple", "Mango"]; let fruit = fruits[2];
at()
方法從數組中返回指定索引的元素。
at()
方法與 []
返回的結果相同。
自 2022 年 3 月起,所有現代瀏覽器中均支持 at()
方法:
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 92 | Edge 92 | Firefox 90 | Safari 15.4 | Opera 78 |
2021 年 4 月 | 2021 年 7 月 | 2021 年 7 月 | 2022 年 3 月 | 2021 年 8 月 |
注意:
許多語言允許使用負索引(如 [-1]
)訪問對象/數組/字符串的末尾元素。
這在 JavaScript 中不可行,因為 []
用于訪問數組和對象。obj[-1] 指的是鍵 -1 的值,而不是對象的最后一個屬性。
at()
方法在 ES2022 中引入,以解決此問題。
JavaScript String at()
ES2022 引入了字符串方法 at()
:
例子 1
獲取 name 字符串的第三個字母:
const name = "W3Schools"; let letter = name.at(2);
例子 2
獲取 name 字符串的第三個字母:
const name = "W3Schools"; let letter = name[2];
at()
方法從字符串中返回指定索引的字符。
at()
方法與 []
返回的結果相同。
自 2022 年 3 月起,所有現代瀏覽器中均支持 at()
方法:
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 92 | Edge 92 | Firefox 90 | Safari 15.4 | Opera 78 |
2021 年 4 月 | 2021 年 7 月 | 2021 年 7 月 | 2022 年 3 月 | 2021 年 8 月 |
RegExp d 修飾符
ES2022 添加了 /d
修飾符,用于表示匹配的開始和結束。
實例
let text = "aaaabb"; let result = text.match(/(aa)(bb)/d);
RegExp 修飾符用于指定不區分大小寫,以及其他全局搜索:
修飾符 | 描述 | 試一試 |
---|---|---|
g | 執行全局匹配(查找所有)。 | 試一試 |
i | 執行不區分大小寫的匹配。 | 試一試 |
d | 執行子字符串匹配(ES2022 新增)。 | 試一試 |
m | 執行多行匹配。 | 試一試 |
Object.hasOwn()
ES2022 提供了一種安全的方法來檢查屬性是否是對象的自有屬性。
Object.hasOwn()
類似于 Object.prototype.hasOwnProperty
,但支持所有對象類型。
實例
Object.hasOwn(myObject, age)
Error Cause
ES2022 允許通過 error.cause 指定錯誤的根本原因。
實例
try { connectData(); } catch (err) { throw new Error("Connecting failed.", { cause: err }); }
JavaScript await import
JavaScript 模塊現在可以在運行前等待需要導入的資源:
import {myData} from './myData.js'; const data = await myData();
JavaScript 類字段聲明
class Hello { counter = 0; // 類字段 } const myClass = new Hello(); let x = myClass.counter;
自 2021 年 4 月起,所有現代瀏覽器中均支持類字段聲明:
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 72 | Edge 79 | Firefox 69 | Safari 14.1 | Opera 60 |
2019 年 1 月 | 2020 年 1 月 | 2019 年 9 月 | 2021 年 4 月 | 2020 年 1 月 |
JavaScript 私有方法和字段
class Hello { #counter = 0; // 私有字段 #myMethod() {} // 私有方法 } const myClass = new Hello(); let x = myClass.#counter; // 錯誤 myClass.#myMethod(); // 錯誤
自 2021 年 6 月起,在所有現代瀏覽器中均支持私有方法和字段:
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 74 | Edge 79 | Firefox 90 | Safari 14.1 | Opera 62 |
2019 年 4 月 | 2020 年 1 月 | 2021 年 6 月 | 2021 年 4 月 | 2019 年 6 月 |