介绍
每年,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。

