new 运算符super 关键字? : ), )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 规范。 它包含最近年份快照的内容以及任何已完成的提案 —— 这些提案已在提案流程中达到第 4 阶段,已在多个实现中落地, 并将被收录进下一个年度快照。历史快照可在 https://ecma-international.org/publications-and-standards/standards/ecma-262/ 获得。
本规范在 GitHub 上由 ECMAScript 社区共同开发。你可以通过以下多种方式参与规范的开发:
更多关于本文件的生成方式,请参考
本 Ecma 标准定义了 ECMAScript 2027 语言。这是 ECMAScript 语言规范的第十八版。 ECMAScript 源自多项技术,最著名的是 JavaScript(Netscape)和 JScript(Microsoft)。 该语言由 Brendan Eich 在网景公司发明,首次出现在该公司发布的 Navigator 2.0 浏览器中。 虽然 ECMAScript 最为人知的是作为网页浏览器内嵌语言,但也被广泛用于浏览器之外的场景,包括服务器和嵌入式应用,现已成长为世界上应用最广泛的通用型编程语言之一。
ECMAScript 语言规范的制定工作始于 1996 年 11 月。第一版 Ecma 标准于 1997 年 6 月在 Ecma 大会通过。
该 Ecma 标准随后提交至 ISO/IEC JTC 1,采用快速通道(fast-track)程序,并于 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 配合万维网取得了巨大成功,成为几乎所有网页浏览器支持的编程语言。曾进行过大量工作以制定第四版规范,但该工作未能完成并发表为 ECMAScript 第四版,其部分成果被吸收进第六版的开发中。
ECMAScript 第五版(作为 ECMA-262 第五版发布)规范化了在浏览器实现中已普遍采用的语言解释方式,并增加了自第三版发布以来出现的新特性,包括
第五版被提交到 ISO/IEC JTC 1 并通过快速通道获得国际标准 ISO/IEC 16262:2011 资格。ECMAScript 标准的 5.1 版包含了小幅修正,与 ISO/IEC 16262:2011 内容相同。5.1 版在 2011 年 6 月由 Ecma 大会通过。
第六版的集中开发始于 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.fromEntries 可直接将 Object.entries 的返回值转为新对象,String.prototype 上的 trimStart 和 trimEnd 是更佳命名的 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 组合器不会因某单 Promise 拒绝而短路;globalThis 通用export * as ns from 'module' 专用语法用于模块内命名空间导出;for-in 枚举顺序更趋规范;import.meta 支持模块上下文相关信息;新增“空值”处理语法特性 Nullish 合并(??)和可选链接(?.)。
ECMAScript 2021(第 12 版)引入了字符串的 replaceAll 方法;Promise.any 是会在任一输入完成时即返回的 Promise 组合器;AggregateError 新错误类型可表示多个错误;逻辑赋值操作符(??=、&&=、||=);WeakRef 支持弱引用对象不影响垃圾回收,FinalizationRegistry 用于对象回收后注册清理回调;数字分隔符(如 1_000);Array.prototype.sort 更精确定义,减少实现相关的不确定顺序。
ECMAScript 2022(第 13 版)增加了顶层 await,允许模块顶层使用#x in obj 语法可检测对象私有字段;正则表达式 /d 标志用于获取子串的起止位置;Error 对象的 cause 属性可记录错误因果链;字符串、数组和 at 方法支持相对索引;Object.hasOwn 为 Object.prototype.hasOwnProperty 提供简化替代。
ECMAScript 2023(第 14 版)针对 Array.prototype 和 TypedArray.prototype 增加了 toSorted、toReversed、with、findLast 和 findLastIndex 等方法,Array.prototype 还新增 toSpliced 方法;支持在文件开头添加 #! 注释以增强可执行性;允许大部分 Symbol 作为弱集合键使用。
ECMAScript 2024(第 15 版)引入了调整和转移 ArrayBuffer 与 SharedArrayBuffer 的能力;新增 RegExp /v 标志,可针对字符串集合创建功能更强的正则表达式;加入了 Promise.withResolvers 快捷方法以构造 Promise,Object.groupBy 与 Map.groupBy 对数据聚合,Atomics.waitAsync 支持异步等待共享内存变化,以及 String.prototype.isWellFormed 与 String.prototype.toWellFormed 方法用于检查并保证字符串仅包含规范 Unicode 字符。
ECMAScript 2025(第 16 版)引入了全局 Iterator,以及用于操作迭代器的静态和原型方法;为 Set.prototype 新增常用集合操作方法;支持导入 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 可从异步可迭代对象等异步来源构建数组;Error.isError 用于识别错误对象;Map.prototype 和 WeakMap.prototype 可检索默认值键方法(当键不存在时可指定默认返回);Uint8Array 新增方法实现与 16 进制及 base64 编码二进制字符串的相互转换;JSON.parse 的 reviver 可访问 JSON 源片段;JSON.rawJSON 用于对原始值执行更细粒度的 stringify 输出控制。
有数十位、代表众多组织的专家在 Ecma TC39 对本版及以往多版标准做出了极其重要的贡献。 此外,支持 TC39 ECMAScript 工作的社区正在蓬勃发展。 他们审查了大量草案,提交了数千个错误报告,开展实现实验,贡献测试套件,推广 ECMAScript 至全球开发者社群。 遗憾的是,无法一一列出和感谢所有为此做出贡献的个人和组织。
Allen Wirfs-Brock
ECMA-262,第六版项目编辑
Brian Terlson
ECMA-262,第七至第十版项目编辑
Jordan Harband
ECMA-262,第十至第十二版项目编辑
Kevin Gibbons
ECMA-262,第十二至第十七版项目编辑
Shu-yu Guo
ECMA-262,第十二至第十八版项目编辑
Michael Ficarra
ECMA-262,第十二至第十八版项目编辑
Richard Gibson
ECMA-262,第十八版项目编辑
Ron Buckton
ECMA-262,第十八版项目编辑
Nicolò Ribaudo
ECMA-262,第十八版项目编辑
Linus Groh
ECMA-262,第十八版项目编辑