Draft ECMA-262 / September 16, 2025

ECMAScript® 2026 语言规范

关于本规范

位于 https://tc39.es/ecma262/ 的文档是最准确且最新的 ECMAScript 规范。它包含了最近年度快照的内容,以及自该快照以来所有已完成的 提案(即已在 提案流程中达到第 4 阶段,并且已在多个实现中落地、将在下一次实际修订中包含的提案)。

本文件可作为单页多页形式获取。

如何参与规范制定

本规范在 GitHub 上由 ECMAScript 社区协作开发。您可以通过以下几种方式参与本规范的制定:

更多关于本文件创建方式的信息请参阅 colophon

简介

本 Ecma 标准定义了 ECMAScript 2026 语言,这是 ECMAScript 语言规范的第十七版。自1997年第一版发布以来,ECMAScript已发展为全球使用最广泛的通用编程语言之一。它最著名的应用是在网页浏览器中嵌入的语言,但也在服务器和嵌入式应用中被广泛采用。

ECMAScript 基于多种起源技术,其中最知名的是 JavaScript(Netscape)和 JScript(Microsoft)。该语言由 Brendan Eich 在 Netscape 发明,并首次出现在该公司 Navigator 2.0 浏览器中。随后,Netscape 的所有浏览器以及 Microsoft 从 Internet Explorer 3.0 起的所有浏览器均支持该语言。

ECMAScript 语言规范的开发始于 1996 年 11 月。该 Ecma 标准的第一版由 Ecma 大会在 1997 年 6 月通过。

该 Ecma 标准按快速通道程序提交至 ISO/IEC JTC 1,并于 1998 年 4 月获批为国际标准 ISO/IEC 16262。Ecma 大会于 1998 年 6 月批准了 ECMA-262 的第二版,以确保其与 ISO/IEC 16262 完全一致。第一版与第二版之间的更改仅为编辑性质。

标准的第三版引入了强大的正则表达式、更好的字符串处理、新的控制语句、try/catch 异常处理、更严格的错误定义、数字输出格式,以及为未来语言发展做出的细微调整。第三版由 Ecma 大会于 1999 年 12 月通过,并作为 ISO/IEC 16262:2002 于 2002 年 6 月发布。

第三版发布后,ECMAScript 在万维网环境下得到广泛采用,成为几乎所有浏览器支持的编程语言。曾有大量工作投入到 ECMAScript 第四版的开发中,但该工作最终未完成并未以第四版发布,部分内容被融入到第六版的开发中。

ECMAScript 第五版(作为 ECMA-262 第 5 版发布)规范化了已成为浏览器实现间通用的语言解释方式,并加入了自第三版发布以来出现的新特性。这些特性包括访问器属性、对象的反射创建与检查、属性特性程序控制、更多数组操作函数、对 JSON 对象编码格式的支持,以及增强错误检查和程序安全性的严格模式。第五版由 Ecma 大会于 2009 年 12 月通过。

第五版按快速通道程序提交至 ISO/IEC JTC 1,并获批为国际标准 ISO/IEC 16262:2011。ECMAScript 标准第 5.1 版包含了细微修正,与 ISO/IEC 16262:2011 的文本一致。5.1 版由 Ecma 大会于 2011 年 6 月通过。

第六版的集中开发始于 2009 年,在第五版准备发布期间。但在此之前,自 1999 年第三版发布起,已进行了大量实验和语言增强设计。实际上,第六版的完成是十五年努力的结晶。本版目标包括更好地支持大型应用、库创建,以及将 ECMAScript 作为其他语言编译目标。主要增强包括模块、类声明、词法块作用域、迭代器和生成器、异步编程的 Promise、解构模式和尾调用优化。内置库扩展以支持更多数据抽象,如 Map、Set 和二进制数值数组,并进一步支持字符串和正则表达式中的 Unicode 补充字符。内置对象也可以通过子类化进行扩展。第六版为语言和库的常规、增量性增强奠定了基础。第六版由 2015 年 6 月的大会通过。

ECMAScript 2016 是 Ecma TC39 新的年度发布节奏和开放开发流程下发布的首个 ECMAScript 版本。基础文档由 ECMAScript 2015 的源文档转换成纯文本格式,并在 GitHub 上持续开发。在本标准开发期间,提交了数百个拉取请求和问题,修复了数千个错误、编辑问题和其他改进。此外,开发了许多软件工具以支持此过程,包括 Ecmarkup、Ecmarkdown 和 Grammarkdown。ES2016 还新增了指数运算符和 Array.prototypeincludes 方法。

ECMAScript 2017 引入了异步函数、共享内存和原子操作,以及多项语言和库的增强、错误修复和编辑更新。异步函数通过提供 Promise 返回函数的语法改善了异步编程体验。共享内存和原子操作引入了新的内存模型,使多代理程序可以使用原子操作进行通信,即使在并行 CPU 上也能确保有序执行。还新增了 Object 的静态方法:Object.valuesObject.entriesObject.getOwnPropertyDescriptors

ECMAScript 2018 引入了通过异步迭代器协议和异步生成器实现的异步迭代支持。还新增了四种正则表达式特性:dotAll 标志、命名捕获组、Unicode 属性转义和后行断言。最后还包括对象剩余和展开属性。

ECMAScript 2019 新增了几种内置函数:用于数组扁平化的 Array.prototype 上的 flatflatMap,用于直接将 Object.entries 的返回值转为新对象的 Object.fromEntries,以及作为更合理命名替代的 String.prototype 上的 trimStarttrimEnd(替代广泛实现但未标准化的 String.prototype.trimLefttrimRight)。此外还包括对语法和语义的细微更新。语法更新包括可选的 catch 绑定参数以及在字符串字面量中允许 U+2028(行分隔符)和 U+2029(段分隔符),以与 JSON 保持一致。其他更新包括要求 Array.prototype.sort 必须为稳定排序,要求 JSON.stringify 无论输入如何都返回格式正确的 UTF-8,以及明确要求 Function.prototype.toString 返回相应的原始源代码或标准占位符。

ECMAScript 2020,第 11 版,引入了字符串的 matchAll 方法,可通过全局正则表达式生成所有匹配对象的迭代器;import(),一种可动态指定异步导入模块的语法;BigInt,用于任意精度整数的新数值原语;Promise.allSettled,一种不会短路的 Promise 组合器;globalThis,一种通用访问全局 this 的方式;模块内专用的 export * as ns from 'module' 语法;for-in 枚举顺序的标准化提升;模块内由宿主环境填充的 import.meta 对象,可包含关于模块的上下文信息;以及为“空值”(undefinednull) 增强体验的新语法特性:空值合并运算符和可选链运算符,分别用于值选择和属性访问/函数调用时遇到空值自动短路。

ECMAScript 2021,第 12 版,引入了字符串的 replaceAll 方法;Promise.any,一种在输入值满足条件时短路的 Promise 组合器;AggregateError,用于同时表示多个错误的新错误类型;逻辑赋值运算符(??=, &&=, ||=);WeakRef,用于引用目标对象但不阻止其被垃圾回收,以及 FinalizationRegistry,用于注册和注销在目标对象被垃圾回收时执行的清理操作;数字字面量分隔符(如 1_000);并且 Array.prototype.sort 更加精确,减少了实现定义排序结果的情况。

ECMAScript 2022,第 13 版,引入了顶层 await,允许在模块顶层使用该关键字;新增类元素:公有和私有实例字段、静态字段、私有实例方法和访问器、私有静态方法和访问器;类中的静态块,用于每个类的初始化;#x in obj 语法,用于检测对象上的私有字段是否存在;正则表达式匹配索引(通过 /d 标志),可提供匹配子字符串的起止索引;错误对象的 cause 属性,可用于记录错误因果链;字符串、数组和 TypedArrayat 方法,实现相对索引;以及 Object.hasOwn,作为更方便的 Object.prototype.hasOwnProperty 替代方案。

ECMAScript 2023,第 14 版,在 Array.prototypeTypedArray.prototype 上新增了 toSortedtoReversedwithfindLastfindLastIndex 方法,并在 Array.prototype 上新增了 toSpliced 方法;支持文件开头的 #! 注释,以更好地支持可执行 ECMAScript 文件;允许在弱集合中使用大多数 Symbol 作为键。

ECMAScript 2024,第 15 版,增加了 ArrayBuffer 和 SharedArrayBuffer 的动态调整大小和转移功能;新增了用于处理字符串集合的高级特性的新正则表达式 /v 标志;引入了便捷构造 Promise 的 Promise.withResolvers 方法,数据聚合的 Object.groupByMap.groupBy 方法,异步等待共享内存变更的 Atomics.waitAsync 方法,以及用于检测和保证字符串仅包含格式正确 Unicode 的 String.prototype.isWellFormedString.prototype.toWellFormed 方法。

ECMAScript 2025,第 16 版,新增了带有相关静态方法和原型方法的全局 Iterator,用于迭代器操作;为 Set.prototype 增加了常用集合操作方法;支持导入 JSON 模块,以及声明导入模块属性的语法;新增了用于安全处理字符串的 RegExp.escape 方法;支持在正则表达式中内联启用和禁用修饰符标志的语法;新增了用于处理可能返回 Promise 或非 Promise 的函数并确保返回值始终是 Promise 的 Promise.try 方法;并新增了新的 Float16Array 类型数组及相关的 DataView.prototype.getFloat16DataView.prototype.setFloat16Math.f16round 方法。

有数十位代表众多机构的个人在 Ecma TC39 中为本版及以往版本的开发做出了重要贡献。此外,支持 TC39 ECMAScript 工作的社区也日益活跃。该社区审查了大量草案,提交了成千上万个错误报告,进行了实现实验,贡献了测试套件,并向全球开发者介绍 ECMAScript。遗憾的是,无法逐一列举和感谢每一位做出贡献的个人和机构。

Allen Wirfs-Brock
ECMA-262,第 6 版项目编辑

Brian Terlson
ECMA-262,第 7–10 版项目编辑

Jordan Harband
ECMA-262,第 10–12 版项目编辑

Shu-yu Guo
ECMA-262,第 12–16 版项目编辑

Michael Ficarra
ECMA-262,第 12–16 版项目编辑

Kevin Gibbons
ECMA-262,第 12–16 版项目编辑