this
关键字 (The this
Keyword)new
运算符 (The new
Operator)super
关键字 (The super
Keyword)? :
) (Conditional Operator ( ? :
)),
)if
语句 (The if
Statement)do
-while
语句 (The do
-while
Statement)while
语句 (The while
Statement)for
语句 (The for
Statement)for
-in
、for
-of
与 for
-await
-of
语句continue
语句 (The continue
Statement)break
语句 (The break
Statement)return
语句 (The return
Statement)with
语句 (The with
Statement)switch
语句 (The switch
Statement)throw
语句 (The throw
Statement)try
语句 (The try
Statement)debugger
语句 (The debugger
Statement)?
u
m
/
p
1-9
0
`
位于 https://tc39.es/ecma262/ 的文档是最准确且最新的 ECMAScript 规范。它包含了最近年度快照的内容,以及自该快照以来所有已完成的 提案(即已在 提案流程中达到第 4 阶段,并且已在多个实现中落地、将在下一次实际修订中包含的提案)。
本规范在 GitHub 上由 ECMAScript 社区协作开发。您可以通过以下几种方式参与本规范的制定:
更多关于本文件创建方式的信息请参阅
本 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 版发布)规范化了已成为浏览器实现间通用的语言解释方式,并加入了自第三版发布以来出现的新特性。这些特性包括
第五版按快速通道程序提交至 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.prototype
的 includes
方法。
ECMAScript 2017 引入了异步函数、共享内存和原子操作,以及多项语言和库的增强、错误修复和编辑更新。异步函数通过提供 Promise 返回函数的语法改善了异步编程体验。共享内存和原子操作引入了新的Object.values
、Object.entries
和 Object.getOwnPropertyDescriptors
。
ECMAScript 2018 引入了通过异步迭代器协议和异步生成器实现的异步迭代支持。还新增了四种正则表达式特性:dotAll
标志、命名捕获组、Unicode 属性转义和后行断言。最后还包括对象剩余和展开属性。
ECMAScript 2019 新增了几种内置函数:用于数组扁平化的 Array.prototype
上的 flat
和 flatMap
,用于直接将 Object.entries
的返回值转为新对象的 Object.fromEntries
,以及作为更合理命名替代的 String.prototype
上的 trimStart
和 trimEnd
(替代广泛实现但未标准化的 String.prototype.trimLeft
和 trimRight
)。此外还包括对语法和语义的细微更新。语法更新包括可选的 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
对象,可包含关于模块的上下文信息;以及为“空值”(
ECMAScript 2021,第 12 版,引入了字符串的 replaceAll
方法;Promise.any
,一种在输入值满足条件时短路的 Promise 组合器;AggregateError
,用于同时表示多个错误的新错误类型;逻辑赋值运算符(??=
, &&=
, ||=
);WeakRef
,用于引用目标对象但不阻止其被垃圾回收,以及 FinalizationRegistry
,用于注册和注销在目标对象被垃圾回收时执行的清理操作;数字字面量分隔符(如 1_000
);并且 Array.prototype.sort
更加精确,减少了实现定义排序结果的情况。
ECMAScript 2022,第 13 版,引入了顶层 await
,允许在模块顶层使用该关键字;新增类元素:公有和私有实例字段、静态字段、私有实例方法和访问器、私有静态方法和访问器;类中的静态块,用于每个类的初始化;#x in obj
语法,用于检测对象上的私有字段是否存在;正则表达式匹配索引(通过 /d
标志),可提供匹配子字符串的起止索引;错误对象的 cause
属性,可用于记录错误因果链;字符串、数组和 at
方法,实现相对索引;以及 Object.hasOwn
,作为更方便的 Object.prototype.hasOwnProperty
替代方案。
ECMAScript 2023,第 14 版,在 Array.prototype
和 TypedArray.prototype
上新增了 toSorted
、toReversed
、with
、findLast
和 findLastIndex
方法,并在 Array.prototype
上新增了 toSpliced
方法;支持文件开头的 #!
注释,以更好地支持可执行 ECMAScript 文件;允许在弱集合中使用大多数 Symbol 作为键。
ECMAScript 2024,第 15 版,增加了 ArrayBuffer 和 SharedArrayBuffer 的动态调整大小和转移功能;新增了用于处理字符串集合的高级特性的新正则表达式 /v
标志;引入了便捷构造 Promise 的 Promise.withResolvers
方法,数据聚合的 Object.groupBy
和 Map.groupBy
方法,异步等待共享内存变更的 Atomics.waitAsync
方法,以及用于检测和保证字符串仅包含格式正确 Unicode 的 String.prototype.isWellFormed
和 String.prototype.toWellFormed
方法。
ECMAScript 2025,第 16 版,新增了带有相关静态方法和原型方法的全局 Iterator
,用于迭代器操作;为 Set.prototype
增加了常用集合操作方法;支持导入 JSON 模块,以及声明导入模块属性的语法;新增了用于安全处理字符串的 RegExp.escape
方法;支持在正则表达式中内联启用和禁用修饰符标志的语法;新增了用于处理可能返回 Promise 或非 Promise 的函数并确保返回值始终是 Promise 的 Promise.try
方法;并新增了新的 Float16Array
类型数组及相关的 DataView.prototype.getFloat16
、DataView.prototype.setFloat16
和 Math.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 版项目编辑