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 = "W3School"; let letter = name.at(2);
例子 2
获取 name 字符串的第三个字母:
const name = "W3School"; 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 月 |