Featured image of post ECMAScript 2025 (ES16) 中令人兴奋的功能Featured image of post ECMAScript 2025 (ES16) 中令人兴奋的功能

ECMAScript 2025 (ES16) 中令人兴奋的功能

预览一下 ECMAScript 2025 中即将推出的标准 API 提案,其中详细介绍了 Promise.try、Iterator Helpers 和本机 Set 操作。

介绍

每年,TC39 委员会都会更新 ECMAScript 规范,为 JavaScript 生态系统引入新的语言功能和 API。

对于即将推出的 ECMAScript 2025 (ES16) 标准,一些提案已达到第 3 阶段或第 4 阶段,表明它们正处于浏览器实施和采用的最后阶段。

本文重点介绍了 ES2025 中的一些新功能,详细介绍了它们如何简化编码模式。


1. Promise.try:统一同步和异步错误处理

JavaScript 开发中的一个常见挑战是以干净、统一的方式处理同步异常和异步 Promise 拒绝。

为了解决这个问题,TC39 委员会引入了 Promise.try()

挑战

当调用可能抛出同步异常或返回被拒绝的 Promise 的函数 runTask 时,干净地处理这两种错误类型可能很困难。

// Handling both error types requires redundant boilerplate
function handleTask(runTask) {
  try {
    const result = runTask();
    if (result instanceof Promise) {
      result.catch(err => console.error("Async error:", err));
    }
  } catch (err) {
    console.error("Sync error:", err);
  }
}

使用 Promise.try 进行干净的实现

Promise.try() 执行传递的回调。如果回调抛出同步异常,则 Promise.try() 捕获异常并返回 rejected Promise。这允许您链接单个 .catch() 处理程序来捕获同步和异步错误。

function handleTask(runTask) {
  Promise.try(runTask)
    .then(result => console.log("Result:", result))
    .catch(err => console.error("Unified error handler:", err));
}

2. 迭代器助手:迭代器上的映射和过滤

尽管数组本身支持 .map().filter(),但 JavaScript Map 和 Set 迭代器(如 .keys().values())历来缺乏这些方法。

ES2025 通过引入 Iterator Helpers 来解决这个问题,它为所有迭代器对象带来实用方法。

代码示例

const mySet = new Set([1, 2, 3, 4, 5]);

// Chain filter and map directly on the Set iterator
const processed = mySet.values()
  .filter(x => x % 2 !== 0) // Keep only odd numbers
  .map(x => x * 10);        // Multiply by 10

for (const value of processed) {
  console.log(value); // Outputs: 10, 30, 50
}
  • 惰性评估: 迭代器助手使用惰性求值,这意味着仅在请求时才处理项目。这允许您处理大型数据集或无限流,而无需为中间数组分配内存。

3. 标准集合操作

本机 JavaScript Set 类接收更新以支持标准数学集合运算。

开发人员现在可以使用本机辅助方法运行这些操作,而不是编写自定义循环来计算并集和交集。

新的设置方法

  • union():返回一个包含两个集合中所有元素的集合。
  • intersection():返回仅包含两个集中都存在的元素的集。
  • difference():返回一个集合,其中包含第一个集合中存在的元素,但不包含第二个集合中的元素。
  • symmetricDifference():返回一个集合,其中包含任一集合中存在的元素,但不是同时存在于两个集合中。

代码示例

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

// Calculate the intersection (common elements)
const common = setA.intersection(setB);
console.log(common); // Set { 3 }

// Calculate the union (all unique elements)
const combined = setA.union(setB);
console.log(combined); // Set { 1, 2, 3, 4, 5 }

结论和浏览器支持

ECMAScript 2025 中的新 API 用直接内置于浏览器 JavaScript 引擎中的本机优化实现取代了自定义帮助程序库(如 Lodash)。

这些提案中的大多数已经在 Chrome、Edge 和 Safari 的实验版或测试版中实现,并且可以通过更新 Babel 或 TypeScript 转译目标来用于开发。

为这些即将到来的标准添加做好准备,以编写更干净、更高效的 JavaScript。