ECMAScript 语言规范的开发始于 1996 年 11 月,基于多种原始技术,包括 JavaScript 和 Microsoft 的 JScript。ECMAScript 由 TC39 维护,TC39 是一个专家委员会,负责提出、审查和最终确定新功能。该标准遵循年度发布周期 ,这意味着 JavaScript 每年都会获得新功能。去年的 ECMAScript 2024 规范包括调整和传输 ArrayBuffers 和 SharedArrayBuffers 等功能,以及用于处理字符串集的更高级正则表达式功能。
ECMAScript 2025 是 JavaScript 的 ECMA 国际标准的下一个版本,它将标准化新的 JavaScript 功能,包括 JSON 模块到导入属性、新的 Set 方法和正则表达式修饰符。ECMAScript 2025 规范可能会在 6 月最终确定,完成的提案包括 JSON 模块、新的正则表达式功能和新的 Set 方法,将于年底发布。
ECMAScript 功能审批流程回顾
在功能进入 ECMAScript 之前,它会经历五个阶段:
Stage 0:Strawperson 第 0 阶段的提案要么计划由 TC39 冠军提交给委员会,要么已提交给委员会但未被明确拒绝,但尚未达到进入第 1 阶段的任何标准。
Stage 1:Proposal 第 1 阶段提案代表了委员会有兴趣花时间探索解决方案的问题。此阶段是创建和审查描述特定问题和解决方案的正式提案的地方。
Stage 2:Draft 第 2 阶段使用正式的规范语言精确描述语法和语义。它表明委员会希望开发这些功能并最终包含在标准中。
Stage 3:Candidate 第 3 阶段表示解决方案已完成,如果没有实施经验、大量使用和外部反馈,就无法进行进一步的工作。
Stage 3:Finished 阶段 4 表示新增内容已准备好包含在正式的 ECMAScript 标准中。
ECMAScript 核心特性
ECMAScript 2025(ES2025)作为 JavaScript 语言的年度重大更新,聚焦开发者痛点,带来了多项实用特性。
异步编程优化
1)Promise.try:
规范:https://tc39.es/ecma262/2025/#sec-promise.try
统一同步与异步函数的异常处理,避免传统 Promise.resolve().then(fn)的微任务延迟问题。例如,当一个函数可能是同步执行并抛出错误,也可能返回一个Promise时,我们需要手动包裹同步函数来统一处理异常,代码结构较为复杂。
const getData = () => {
if(Math.random() > 0.8) thrownewError('failed');
returnPromise.resolve('success');
}
// 传统方案
try {
getData()
.then((result) =>console.log(result));
} catch (err) {
console.error(err);
}
// ES2025
Promise.try(getData)
.then(result =>console.log(result))
.catch(err =>console.error(err));
2)异步上下文传播:
规范:https://tc39.es/ecma262/2025/#sec-async-functions-abstract-operations-async-function-start
此功能将允许上下文在异步作中持续存在,从而解决在处理日志记录、请求跟踪或全局状态时出现 async/await 的问题。可以进一步简化跨异步作的状态管理,无需复杂的解决方法。
import { AsyncContext } from 'async-context';
// 堆代码 duidaima.com
const context = new AsyncContext();
context.run(() => {
context.set('mp', { name: 'FED实验室', description: '专注于前端全栈化和智能化(AI)方向。' });
asyncOperation().then(() => {
// { name: 'FED实验室', description: '专注于前端全栈化和智能化(AI)方向。' }
console.log(context.get('mp'));
});
});
标准化的 JSON 模块
规范:https://tc39.es/ecma262/2025/#sec-modules
JSON 模块允许在 JavaScript 中以本地方式导入 JSON 文件,类似于导入 JavaScript 或 CSS 的方式。
import config from './config.json' with { type: 'json' }
集合与数据操作
规范:https://tc39.es/ecma262/2025/#sec-properties-of-the-set-prototype-object
1)Set 方法增强:
新增 union()、intersection()、difference()、symmetricDifference()、isSubsetOf()、isSupersetOf() 等方法。
const set1 = newSet(['a', 'b']);
const set2 = newSet(['a', 'c']);
// 交集
// Set {'a'}
set1.intersection(set2);
// 差集
// Set {'b'}
set1.difference(set2);
// 并集
// Set {'a','b','c'}
set1.union(set2);
2)TypedArray增强:
引入Float16Array类型,支持16位浮点数存储,内存占用减少50%,适用于机器学习、图形计算等场景。
正则表达式增强
规范:https://tc39.es/ecma262/2025/#sec-regexp.escape
RegExp.escape() 动态转义正则表达式中的特殊字符(如*、$),避免注入风险:
const regex = new RegExp(RegExp.escape("FED (实验室)"), 'g');