ECMAScript 2022

Nomor versi JavaScript

Versi ECMAScript lama dinamai dengan angka: ES5 dan ES6.

Dari tahun 2016, versi dinamai dengan tahun: ES2016, 2018, 2020, 2022.

Fitur baru ES2022

Peringatan:

Fitur ini relatif baru.

Browser versi lama mungkin memerlukan kode pengganti (Polyfill).

JavaScript Array at()

ES2022 mengenalkan metode array at():

Contoh 1

Mendapatkan elemen ketiga dari array fruits:

const fruits = ["Banana", "Orange", "Apple", "Mango"];
let fruit = fruits.at(2);

亲自试一试

Contoh 2

Mendapatkan elemen ketiga dari array fruits:

const fruits = ["Banana", "Orange", "Apple", "Mango"];
let fruit = fruits[2];

亲自试一试

at() Metode ini mengembalikan elemen yang ditentukan indeksnya dari array.

at() 方法与 [] 返回的结果相同。

自 2022 年 3 月起,所有现代浏览器中均支持 at() 方法:

Chrome Edge Firefox Safari Opera
Chrome 92 Edge 92 Firefox 90 Safari 15.4 Opera 78
Apr 2021 2021 年 7 月 2021 年 7 月 2022 年 3 月 2021 年 8 月

Perhatian:

Banyak bahasa memungkinkan penggunaan indeks negatif (seperti [-1])Akses elemen akhir objek/arrays/string.

Ini tidak mungkin di JavaScript karena [] Digunakan untuk mengakses array dan objek. obj[-1] merujuk kepada nilai kunci -1, bukan properti terakhir objek.

at() Metode ini diintroduksi di ES2022 untuk memecahkan masalah ini.

JavaScript String at()

ES2022 mengenalkan metode string at():

Contoh 1

Mendapatkan huruf ketiga string name:

const name = "W3Schools";
let letter = name.at(2);

亲自试一试

Contoh 2

Mendapatkan huruf ketiga string 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
Apr 2021 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 月 Jan 2020 2019 年 9 月 Apr 2021 Jan 2020

Kaedah dan medan perseorangan JavaScript

class Hello {
  #counter = 0;  // Medan perseorangan
  #myMethod() {} // Kaedah perseorangan
}
const myClass = new Hello();
let x = myClass.#counter; // Kesalahan
myClass.#myMethod();      // Kesalahan

Dari bulan Jun 2021, semua pelayar modern mendukung kaedah dan medan perseorangan:

Chrome Edge Firefox Safari Opera
Chrome 74 Edge 79 Firefox 90 Safari 14.1 Opera 62
Apr 2019 Jan 2020 Jun 2021 Apr 2021 Jun 2019