? : ), )if 语句do-while 语句while 语句for 语句for-in、for-of 和 for-await-of 语句continue 语句break 语句return 语句with 语句switch 语句throw 语句try 语句debugger 语句?uem/p1-90`位于 https://tc39.es/ecma262/ 的文档是最准确、最新的 ECMAScript 规范。它
本规范在 ECMAScript 社区的帮助下于 GitHub 上开发。可以通过多种方式为本规范的开发做出贡献:
有关本文档创建方式的更多信息,请参阅
本 Ecma 标准定义了 ECMAScript 2027 语言。这是 ECMAScript 语言规范的第十八版。ECMAScript 基于若干早期技术,其中最广为人知的是 JavaScript(Netscape)和 JScript(Microsoft)。该语言由 Netscape 的 Brendan Eich 发明,并首次出现在该公司的 Navigator 2.0 浏览器中。尽管它最为人熟知的用途是作为嵌入 Web 浏览器的语言,但它也已广泛用于浏览器之外,包括服务器和嵌入式应用,并已发展成为世界上使用最广泛的通用编程语言之一。
ECMAScript 语言规范的开发始于 1996 年 11 月。本 Ecma 标准的第一版于 1997 年 6 月获 Ecma 大会通过。
该 Ecma 标准被提交给 ISO/IEC JTC 1,以便通过快速程序采纳,并于 1998 年 4 月获批为国际标准 ISO/IEC 16262。1998 年 6 月的 Ecma 大会批准了 ECMA-262 第二版,使其与 ISO/IEC 16262 完全一致。第一版与第二版之间的更改属于编辑性更改。
本标准的第三版引入了强大的正则表达式、更好的字符串处理、新的控制语句、try/catch 异常处理、更严格的错误定义、数值输出格式化,以及为语言未来发展而做出的小幅更改。ECMAScript 标准第三版于 1999 年 12 月获 Ecma 大会通过,并于 2002 年 6 月作为 ISO/IEC 16262:2002 发布。
第三版发布后,ECMAScript 随着万维网的发展得到大规模采用,并成为几乎所有 Web 浏览器都支持的编程语言。ECMAScript 第四版的开发曾投入大量工作。然而,这些工作未能完成,也未作为 ECMAScript 第四版发布,但其中一部分被纳入了第六版的开发。
ECMAScript 第五版(以 ECMA-262 第 5版发布)将浏览器实现中已普遍采用的对语言规范的事实解释正式写入规范,并增加了对第三版发布后出现的新特性的支持。这些特性包括
第五版被提交给 ISO/IEC JTC 1,以便通过快速程序采纳,并获批为国际标准 ISO/IEC 16262:2011。ECMAScript 标准第 5.1 版纳入了少量修正,其文本与 ISO/IEC 16262:2011 相同。第 5.1 版于 2011 年 6 月获 Ecma 大会通过。
第六版的集中开发始于 2009 年,当时第五版正准备发布。然而,在此之前,自 1999 年第三版发布以来,已经进行了大量实验和语言增强设计工作。从切实的意义上说,第六版的完成是十五年努力的结晶。本版的目标包括为大型应用、库的创建,以及将 ECMAScript 用作其他语言的编译目标提供更好的支持。其主要增强包括模块、类声明、词法块作用域、迭代器和生成器、用于异步编程的 promise、解构模式,以及正确的尾调用。ECMAScript 内置库得到扩展,以支持更多数据抽象,包括映射、集合和二进制数值数组,并增强了对字符串和正则表达式中 Unicode 补充字符的支持。内置对象也可以通过子类化进行扩展。第六版为语言和库的定期增量增强奠定了基础。第六版于 2015 年 6 月获大会通过。
ECMAScript 2016 是按照 Ecma TC39 新的年度发布节奏和开放开发流程发布的首个 ECMAScript 版本。基于 ECMAScript 2015 源文档构建了纯文本源文档,作为完全在 GitHub 上进行后续开发的基础。在本标准开发的一年中,提交了数百个拉取请求和议题,涵盖数千项错误修复、编辑性修正和其他改进。此外,还开发了许多软件工具来协助这项工作,包括 Ecmarkup、Ecmarkdown 和 Grammarkdown。ES2016 还支持了新的求幂运算符,并为 Array.prototype 添加了名为 includes 的新方法。
ECMAScript 2017 引入了异步函数、共享内存和原子操作,同时Object.values、Object.entries 和 Object.getOwnPropertyDescriptors。
ECMAScript 2018 通过异步迭代器协议和异步生成器引入了对异步迭代的支持。它还dotAll 标志、具名捕获组、Unicode 属性转义和后行
ECMAScript 2019 引入了几个新的内置函数:Array.prototype 上用于展平数组的 flat 和 flatMap;用于将 Object.entries 的返回值直接转换为新 Object 的 Object.fromEntries;以及 String.prototype 上的 trimStart 和 trimEnd,作为已广泛实现但非标准的内置方法 String.prototype.trimLeft 和 trimRight 的命名更恰当的替代方法。此外,它还Array.prototype.sort 使用稳定排序,要求 JSON.stringify 无论输入如何都返回格式良好的 UTF-8,以及通过要求 Function.prototype.toString 返回相应的原始源文本或标准占位符来明确其行为。
ECMAScript 2020,即第 11版,为 String 引入了 matchAll 方法,用于生成遍历全局正则表达式产生的所有匹配对象的迭代器;引入了 import(),这是一种使用动态说明符异步导入模块的语法;引入了 BigInt,这是一种用于处理任意精度Promise.allSettled,这是一个不会短路的 Promise 组合方法;引入了 globalThis,这是一种访问全局 this 值的通用方式;引入了在模块内使用的专用语法 export * as ns from 'module';进一步标准化了 for-in 的枚举顺序;引入了 import.meta,这是模块中可用的由
ECMAScript 2021,即第 12版,为 String 引入了 replaceAll 方法;引入了 Promise.any,这是一个在某个输入值兑现时短路的 Promise 组合方法;引入了 AggregateError,这是一种用于同时表示多个错误的新 Error 类型;引入了逻辑赋值运算符(??=、&&=、||=);引入了 WeakRef,用于引用目标对象而不阻止其被垃圾回收,以及 FinalizationRegistry,用于管理在目标对象被垃圾回收时执行的清理操作的1_000);并进一步明确了 Array.prototype.sort 的行为,减少了导致
ECMAScript 2022,即第 13版,引入了顶层 await,允许在模块顶层使用该#x in obj 语法,用于检查对象上是否存在私有字段;通过 /d 标志引入了正则表达式匹配索引,为匹配的Error 对象引入了 cause 属性,可用于记录错误的因果链;为 String、Array 和 at 方法,允许使用相对索引;并引入了 Object.hasOwn,作为 Object.prototype.hasOwnProperty 的便捷替代方法。
ECMAScript 2023,即第 14版,为 Array.prototype 和 TypedArray.prototype 引入了 toSorted、toReversed、with、findLast 和 findLastIndex 方法,并为 Array.prototype 引入了 toSpliced 方法;增加了对文件开头 #!
ECMAScript 2024,即第 15版,增加了调整 ArrayBuffer 和 SharedArrayBuffer 大小以及转移它们的功能;添加了新的 RegExp /v 标志,用于创建具有更高级字符串集合处理特性的 RegExp;并引入了用于构造 Promise 的便捷方法 Promise.withResolvers、用于聚合数据的 Object.groupBy 和 Map.groupBy 方法、用于异步等待共享内存发生更改的 Atomics.waitAsync 方法,以及用于检查并确保字符串仅String.prototype.isWellFormed 和 String.prototype.toWellFormed 方法。
ECMAScript 2025,即第 16版,添加了新的全局 Iterator,以及用于处理迭代器的相关静态方法和原型方法;为 Set.prototype 添加了用于执行常见 Set 操作的方法;增加了对导入 JSON 模块的支持,以及用于声明导入模块特性的语法;添加了 RegExp.escape 方法,用于转义字符串,以便安全地将其用于正则表达式;添加了在正则表达式内部启用和禁用修饰符标志的语法;添加了 Promise.try 方法,用于调用可能返回或不返回 Promise 的函数,并确保结果始终为 Promise;还添加了新的 Float16Array DataView.prototype.getFloat16、DataView.prototype.setFloat16 和 Math.f16round 方法。
ECMAScript 2026,即第 17版,添加了 Math.sumPrecise,用于对由不同数量级的 Iterator.concat,用于按顺序连接迭代器;添加了 Array.fromAsync,用于从异步可迭代对象和其他异步来源构造 Array;添加了 Error.isError,用于识别错误对象;为 Map.prototype 和 WeakMap.prototype 添加了方法,用于在键尚不存在时提供检索所用的默认值;为 Uint8Array 添加了方法,用于在二进制数据与其十六进制和 base64 编码的 String 值之间进行转换;为 JSON.parse 的 reviver 添加了一个参数,用于访问匹配的 JSON 源文本片段;并添加了 JSON.rawJSON,用于精细控制 JSON.stringify 对原始值的输出。
代表许多组织的数十位成员在 Ecma TC39 内为本版及先前各版的开发做出了非常重要的贡献。此外,一个充满活力的社区已经形成,为 TC39 的 ECMAScript 工作提供支持。该社区审阅了众多草案,提交了数千份错误报告,进行了实现实验,贡献了测试套件,并向全球开发者社区普及 ECMAScript。遗憾的是,无法一一列出并感谢为这项工作做出贡献的每个人和组织。
Allen Wirfs-Brock
ECMA-262,项目编辑,第 6版
Brian Terlson
ECMA-262,项目编辑,第 7版至第 10版
Jordan Harband
ECMA-262,项目编辑,第 10版至第 12版
Kevin Gibbons
ECMA-262,项目编辑,第 12版至第 17版
Shu-yu Guo
ECMA-262,项目编辑,第 12版至第 18版
Michael Ficarra
ECMA-262,项目编辑,第 12版至第 18版
Richard Gibson
ECMA-262,项目编辑,第 18版
Ron Buckton
ECMA-262,项目编辑,第 18版
Nicolò Ribaudo
ECMA-262,项目编辑,第 18版
Linus Groh
ECMA-262,项目编辑,第 18版