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 月