Skip to content

ECMAScript 2025

🧑🏻‍💻 作者:俊小赞
🗓️ 发布时间:2025-12-18
🕘 最后更新:1天前
🔢 字数统计:674
📖 预计阅读:2分钟

ECMAScript 2025(简称 ES2025)是 JavaScript 标准的第 16 个版本。本次更新引入了多项重量级特性,特别是对迭代器(Iterators)和集合(Sets)的增强,极大地提升了原生 JavaScript 处理复杂数据的能力。

以下是 ES2025 中最值得关注的新特性:

1. 迭代器助手 (Iterator Helpers)

在此之前,如果你想对 Map.keys()Set.values() 返回的迭代器进行 map 或 filter 操作,必须先将其转换为数组。ES2025 为迭代器原型直接添加了这些常用方法。

javascript
const myMap = new Map([
  ["a", 1],
  ["b", 2],
  ["c", 3],
]);

// 现在可以直接在迭代器上使用 map, filter, take 等方法
const result = myMap
  .keys()
  .filter((key) => key !== "b")
  .map((key) => key.toUpperCase())
  .toArray(); // 快速转回数组

console.log(result); // ["A", "C"]

// 其他辅助方法
const firstTwo = myMap.values().take(2); // 只取前两个

2. 新的 Set 方法 (New Set Methods)

ES2025 为 Set 对象增加了多个数学意义上的集合操作方法,不再需要手动编写循环或依赖 Lodash 等库。

javascript
const setA = new Set([1, 2, 3]);
const setB = new Set([3, 4, 5]);

// 并集 (Union)
const union = setA.union(setB); // Set {1, 2, 3, 4, 5}

// 交集 (Intersection)
const intersection = setA.intersection(setB); // Set {3}

// 差集 (Difference)
const difference = setA.difference(setB); // Set {1, 2}

// 对称差集 (Symmetric Difference)
const symDiff = setA.symmetricDifference(setB); // Set {1, 2, 4, 5}

// 判断关系
console.log(setA.isSubsetOf(setB)); // false
console.log(setA.isDisjointFrom(setB)); // false (因为有交集 3)

3. 导入属性 (Import Attributes)

这是对模块导入系统的增强。在之前的提案中曾被称为 "Import Assertions",现在正式定名为 "Import Attributes",并使用 with 关键字。它允许在导入模块时携带元数据,最典型的场景是导入 JSON 模块。

javascript
// 导入 JSON 模块,并明确指定类型
import config from './config.json' with { type: 'json' };

console.log(config.appName);

// 动态导入同样支持
const messages = await import('./messages.json', {
  with: { type: 'json' }
});

4. Promise.try

Promise.try 是一个简单但实用的语法糖。它允许你运行一个函数(无论它是同步的还是异步的),并将结果统一包装在 Promise 中。这在处理可能抛出同步错误的函数时非常有用,可以统一用 .catch() 捕获。

javascript
function maybeThrows(id) {
  if (id < 0) throw new Error("Invalid ID");
  return `User-${id}`;
}

// 以前需要这样处理同步错误
// try { ... } catch (e) { ... }

// 现在可以统一处理
Promise.try(() => maybeThrows(-1))
  .then((res) => console.log(res))
  .catch((err) => console.error("捕获到错误:", err.message));

5. 正则表达式修饰符 (RegExp Modifiers)

ES2025 允许在正则表达式内部开启或关闭局部修饰符(如 i, m, s)。这使得在同一个正则表达式中,不同部分可以有不同的匹配行为。

javascript
// 在括号内开启 'i' (忽略大小写)
const regex = /JavaScript (?i:is) Awesome/;

console.log(regex.test("JavaScript is Awesome")); // true
console.log(regex.test("JavaScript IS Awesome")); // true
console.log(regex.test("JAVASCRIPT is Awesome")); // false (开头部分仍区分大小写)

6. RegExp.escape

在处理用户输入并将其作为正则表达式的一部分时,最头疼的就是转义特殊字符。RegExp.escape 提供了官方的解决方案。

javascript
const userInput = "Hello. (world)+";

// 以前需要手动写正则替换:userInput.replace(/[.*+?^${}()|[\]\\]/g, '\\__CODE_BLOCK_5__')
// 现在直接使用官方方法
const safePattern = RegExp.escape(userInput);
const regex = new RegExp(`^${safePattern}---
layout: doc
date: "2025-12-18"
author: "俊小赞"
---

# ECMAScript 2025

<PageInfo readingTime="2" wordCount="674" publicTime=""/>


ECMAScript 2025(简称 ES2025)是 JavaScript 标准的第 16 个版本。本次更新引入了多项重量级特性,特别是对迭代器(Iterators)和集合(Sets)的增强,极大地提升了原生 JavaScript 处理复杂数据的能力。

以下是 ES2025 中最值得关注的新特性:

## 1. 迭代器助手 (Iterator Helpers)

在此之前,如果你想对 `Map.keys()` 或 `Set.values()` 返回的迭代器进行 map 或 filter 操作,必须先将其转换为数组。ES2025 为迭代器原型直接添加了这些常用方法。

```javascript
const myMap = new Map([
  ["a", 1],
  ["b", 2],
  ["c", 3],
]);

// 现在可以直接在迭代器上使用 map, filter, take 等方法
const result = myMap
  .keys()
  .filter((key) => key !== "b")
  .map((key) => key.toUpperCase())
  .toArray(); // 快速转回数组

console.log(result); // ["A", "C"]

// 其他辅助方法
const firstTwo = myMap.values().take(2); // 只取前两个

2. 新的 Set 方法 (New Set Methods)

ES2025 为 Set 对象增加了多个数学意义上的集合操作方法,不再需要手动编写循环或依赖 Lodash 等库。

javascript
const setA = new Set([1, 2, 3]);
const setB = new Set([3, 4, 5]);

// 并集 (Union)
const union = setA.union(setB); // Set {1, 2, 3, 4, 5}

// 交集 (Intersection)
const intersection = setA.intersection(setB); // Set {3}

// 差集 (Difference)
const difference = setA.difference(setB); // Set {1, 2}

// 对称差集 (Symmetric Difference)
const symDiff = setA.symmetricDifference(setB); // Set {1, 2, 4, 5}

// 判断关系
console.log(setA.isSubsetOf(setB)); // false
console.log(setA.isDisjointFrom(setB)); // false (因为有交集 3)

3. 导入属性 (Import Attributes)

这是对模块导入系统的增强。在之前的提案中曾被称为 "Import Assertions",现在正式定名为 "Import Attributes",并使用 with 关键字。它允许在导入模块时携带元数据,最典型的场景是导入 JSON 模块。

javascript
// 导入 JSON 模块,并明确指定类型
import config from './config.json' with { type: 'json' };

console.log(config.appName);

// 动态导入同样支持
const messages = await import('./messages.json', {
  with: { type: 'json' }
});

4. Promise.try

Promise.try 是一个简单但实用的语法糖。它允许你运行一个函数(无论它是同步的还是异步的),并将结果统一包装在 Promise 中。这在处理可能抛出同步错误的函数时非常有用,可以统一用 .catch() 捕获。

javascript
function maybeThrows(id) {
  if (id < 0) throw new Error("Invalid ID");
  return `User-${id}`;
}

// 以前需要这样处理同步错误
// try { ... } catch (e) { ... }

// 现在可以统一处理
Promise.try(() => maybeThrows(-1))
  .then((res) => console.log(res))
  .catch((err) => console.error("捕获到错误:", err.message));

5. 正则表达式修饰符 (RegExp Modifiers)

ES2025 允许在正则表达式内部开启或关闭局部修饰符(如 i, m, s)。这使得在同一个正则表达式中,不同部分可以有不同的匹配行为。

javascript
// 在括号内开启 'i' (忽略大小写)
const regex = /JavaScript (?i:is) Awesome/;

console.log(regex.test("JavaScript is Awesome")); // true
console.log(regex.test("JavaScript IS Awesome")); // true
console.log(regex.test("JAVASCRIPT is Awesome")); // false (开头部分仍区分大小写)

6. RegExp.escape

在处理用户输入并将其作为正则表达式的一部分时,最头疼的就是转义特殊字符。RegExp.escape 提供了官方的解决方案。

);

console.log(regex.test("Hello. (world)+")); // true


## 7. Float16Array

为了满足高性能计算、图形学和 AI 模型部署的需求,ES2025 引入了 `Float16Array`。相比 `Float32Array`,它能节省一半的内存空间。

```javascript
const halfFloats = new Float16Array([1.5, 2.5, 3.5]);

console.log(halfFloats.length); // 3
console.log(halfFloats.byteLength); // 6 (每个元素 2 字节)

8. 重复命名捕获组 (Duplicate Named Capture Groups)

在以前,同一个正则表达式中不允许出现同名的捕获组。ES2025 允许在不同的分支(|)中使用相同的捕获组名称。

javascript
const regex = /(?<year>\d{4})-\d{2}|\d{2}-(?<year>\d{4})/;

const match1 = "2025-01".match(regex);
console.log(match1.groups.year); // "2025"

const match2 = "01-2026".match(regex);
console.log(match2.groups.year); // "2026"

总结

ES2025 是一个注重“补齐短板”的版本。迭代器助手和集合方法极大地简化了日常的数据处理,而 RegExp.escapePromise.try 解决了长期以来开发者不得不依赖第三方库或手动实现的小痛点。

目前,这些特性在主流浏览器(Chrome 125+, Firefox 128+, Safari 17.4+)中已得到广泛支持。

参考文献

ECMA-262 2025 规范 👉

Released under the MIT License.