? :),)if 语句do-while 语句while 语句for 语句for-in、for-of 和 for-await-of 语句continue 语句break 语句return 语句with 语句switch 语句throw 语句try 语句debugger 语句?um/p1-90`位于 https://tc39.es/ecma262/ 的文档是最准确且最新的 ECMAScript 规范。它
本规范在 GitHub 上借助 ECMAScript 社区的帮助进行开发。有多种方式可以参与本规范的开发:
有关本文档如何创建的更多信息,请参阅
本 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 第 5th 版发布)将浏览器实现中已变得常见的对语言规范的事实解释规范化,并增加了对自第三版发布以来出现的新特性的支持。这些特性包括
第五版根据快速通道程序提交给 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 引入了 Async Functions、Shared Memory 和 Atomics,以及较小的语言和库增强、缺陷修复和编辑更新。Async 函数通过为返回 Promise 的函数提供语法,改善了异步编程体验。Shared Memory 和 Atomics 引入了一种新的Object.values、Object.entries 和 Object.getOwnPropertyDescriptors。
ECMAScript 2018 通过 dotAll 标志、命名捕获组、Unicode 属性转义和后行断言。最后,它还
ECMAScript 2019 引入了若干新的内置函数:Array.prototype 上用于扁平化数组的 flat 和 flatMap、用于直接将 Object.entries 的返回值转换为新 Object 的 Object.fromEntries,以及 String.prototype 上作为已广泛实现但非标准的 String.prototype.trimLeft 和 trimRight 内置函数更好命名替代项的 trimStart 和 trimEnd。此外,它还Array.prototype.sort 是稳定排序、要求 JSON.stringify 无论输入如何都返回格式良好的 UTF-8,以及通过要求 Function.prototype.toString 要么返回对应的原始源文本,要么返回标准占位符来澄清该方法。
ECMAScript 2020,第 11th 版,引入了 Strings 的 matchAll 方法,用于为全局正则表达式生成的所有匹配对象产生一个迭代器;import(),一种使用动态说明符异步导入 Modules 的语法;BigInt,一种用于处理任意精度整数的新数字原始值;Promise.allSettled,一种不会短路的新 Promise 组合器;globalThis,一种访问全局 this 值的通用方式;专用于在模块中使用的 export * as ns from 'module' 语法;对 for-in 枚举顺序的标准化增强;import.meta,一种在 Modules 中可用、由
ECMAScript 2021,第 12th 版,引入了 Strings 的 replaceAll 方法;Promise.any,一种当输入值 fulfilled 时短路的 Promise 组合器;AggregateError,一种一次表示多个错误的新 Error 类型;逻辑赋值运算符(??=、&&=、||=);WeakRef,用于在不阻止目标对象被垃圾回收的情况下引用目标对象;以及 FinalizationRegistry,用于管理当目标对象被垃圾回收时执行的清理操作的注册和注销;数值字面量分隔符(1_000);并使 Array.prototype.sort 更精确,减少会导致实现定义
ECMAScript 2022,第 13th 版,引入了顶层 await,允许在模块的顶层使用该#x in obj 语法,用于测试对象上是否存在私有字段;通过 /d 标志提供的正则表达式匹配索引,它为匹配的cause 属性,可用于在错误中记录因果链;Strings、Arrays 和 at 方法,允许相对索引;以及 Object.hasOwn,作为 Object.prototype.hasOwnProperty 的便捷替代项。
ECMAScript 2023,第 14th 版,引入了 Array.prototype 和 TypedArray.prototype 上的 toSorted、toReversed、with、findLast 和 findLastIndex 方法,以及 Array.prototype 上的 toSpliced 方法;增加了对文件开头 #! 注释的支持,以更好地便于可执行 ECMAScript 文件;并允许将大多数 Symbols 用作弱集合中的键。
ECMAScript 2024,第 15th 版,添加了用于调整和转移 ArrayBuffers 与 SharedArrayBuffers 的设施;添加了新的 RegExp /v 标志,用于创建具备更高级特性、可处理字符串集合的 RegExps;并引入了用于构造 Promises 的便捷方法 Promise.withResolvers,用于聚合数据的 Object.groupBy 和 Map.groupBy 方法,用于异步等待共享内存变化的 Atomics.waitAsync 方法,以及用于检查并确保字符串只String.prototype.isWellFormed 和 String.prototype.toWellFormed 方法。
ECMAScript 2025,第 16th 版,添加了新的 Iterator Set.prototype 添加了用于执行常见 Set 操作的方法;增加了对导入 JSON modules 以及声明导入模块属性的语法的支持;添加了 RegExp.escape 方法,用于转义字符串以便安全地用于正则表达式;添加了用于在正则表达式内联启用和禁用修饰符标志的语法;添加了 Promise.try 方法,用于调用可能返回也可能不返回 Promise 的函数,并确保结果始终是 Promise;并添加了新的 Float16Array DataView.prototype.getFloat16、DataView.prototype.setFloat16 和 Math.f16round 方法。
ECMAScript 2026,第 17th 版,添加了 Math.sumPrecise,用于对不同量级的 Numbers 可迭代对象求和,同时最小化精度损失;Iterator.concat,用于串接迭代器;Array.fromAsync,用于从 Error.isError,用于识别错误对象;向 Map.prototype 和 WeakMap.prototype 添加了方法,用于在键尚不存在时提供检索期间使用的默认值;向 Uint8Array 添加了方法,用于转换为十六进制和 base64 编码二进制数据的 Strings 以及从这些 Strings 转换回来;向 JSON.parse revivers 添加了一个参数,用于访问匹配的 JSON 源片段;以及 JSON.rawJSON,用于对原始值的 JSON.stringify 输出进行精细控制。
来自许多组织的数十名个人对本版以及之前各版在 Ecma TC39 内的发展作出了非常重要的贡献。此外,一个充满活力的社区已经形成,支持 TC39 的 ECMAScript 工作。该社区审阅了大量草案,提交了数千份缺陷报告,开展了实现实验,贡献了测试套件,并向全球开发者社区普及了 ECMAScript。遗憾的是,要识别并致谢每一位为此作出贡献的个人和组织是不可能的。
Allen Wirfs-Brock
ECMA-262,第 6th 版项目编辑
Brian Terlson
ECMA-262,第 7th 至第 10th 版项目编辑
Jordan Harband
ECMA-262,第 10th 至第 12th 版项目编辑
Kevin Gibbons
ECMA-262,第 12th 至第 17th 版项目编辑
Shu-yu Guo
ECMA-262,第 12th 至第 18th 版项目编辑
Michael Ficarra
ECMA-262,第 12th 至第 18th 版项目编辑
Richard Gibson
ECMA-262,第 18th 版项目编辑
Ron Buckton
ECMA-262,第 18th 版项目编辑
Nicolò Ribaudo
ECMA-262,第 18th 版项目编辑
Linus Groh
ECMA-262,第 18th 版项目编辑