Skip to main content

介绍

ECMA简介

这个 Ecma 标准定义了 ECMAScript 2023 语言。它是 ECMAScript 语言规范的第十四版。自 1997 年第一版出版以来,ECMAScript 已经发展成为世界上使用最广泛的通用编程语言之一。它最广为人知的是嵌入在Web浏览器中的语言,但也已广泛用于服务器和嵌入式应用程序。

ECMAScript 基于几种原始技术,最著名的是 JavaScript(Netscape)JScript(Microsoft)。该语言由NetscapeBrendan Eich发明,并首次出现在该公司的Navigator 2.0浏览器中。它已经出现在Netscape的所有后续浏览器中,以及从Internet Explorer 3.0开始Microsoft的所有浏览器中。

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 完全一致。第一版和第二版之间的变化是编辑性质的。

ES3

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

ES4(未发布)

在第三版出版后,ECMAScript 与万维网一起获得了广泛的采用,它已成为几乎所有 Web 浏览器都支持的编程语言。为开发第四版 ECMAScript 做了大量工作。然而,这项工作没有完成,也没有作为 ECMAScript 的第四版出版,但其中一些被纳入了第六版的开发中。

ES5

ECMAScript 的第五版(作为 ECMA-262 5 th 版发布)编纂了浏览器实现中常见的语言规范的事实解释,并增加了对自第三版发布以来出现的新功能的支持。这些功能包括访问器属性、对象的反射创建和检查、属性属性的程序控制、其他数组操作函数、对 JSON 对象编码格式的支持,以及提供增强的错误检查和程序安全性的严格模式。第五版由2009年12月的ECMA大会通过。

ES6

第六版的重点开发始于2009年,当时第五版正在准备出版。然而,在此之前,进行了大量的实验和语言增强设计工作,可追溯到1999年第三版的出版。从非常真实的意义上讲,第六版的完成是十五年努力的结果。这个版本的目标包括为大型应用程序提供更好的支持,库创建,以及使用 ECMAScript 作为其他语言的编译目标。它的一些主要增强功能包括模块类声明词法块作用域迭代器和生成器异步编程的Promise解构模式和适当的尾部调用。ECMAScript 内置库进行了扩展,以支持其他数据抽象,包括二进制数值的映射、集合和数组,以及对字符串和正则表达式中的 Unicode 增补字符的额外支持。内置模块也可通过子类化进行扩展。第六版为常规、增量语言和库增强提供了基础。第六版由大会于2015年6月通过。

ES2016

ECMAScript 2016 是在 Ecma TC39 新的年度发布节奏和开放开发流程下发布的第一个 ECMAScript 版本。从 ECMAScript 2015 源文档构建了一个纯文本源文档,作为完全在 GitHub 上进行进一步开发的基础。在该标准开发的一年中,提交了数百个拉取请求和问题,代表了数千个错误修复、编辑修复和其他改进。此外,还开发了许多软件工具来帮助这项工作,包括Ecmarkup,Ecmarkdown和Grammarkdown。ES2016 还包括对新幂运算符的支持,并添加了一个名为 Array.prototype.includes的方法。

ES2017

ECMAScript 2017 引入了异步函数、共享内存和原子,以及更小的语言和库增强、错误修复和编辑更新。异步函数通过为Promise返回函数提供语法来改进异步编程体验。共享内存和原子引入了一种新的内存模型,允许多代理程序使用原子操作进行通信,即使在并行CPU上也能确保明确定义的执行顺序。它还包括 Object 上的新静态方法: Object.values 、 Object.entries 和 Object.getOwnPropertyDescriptors。

ES2018

ECMAScript 2018 引入了对通过 AsyncIterator 协议和异步生成器进行异步迭代的支持。它还包括四个新的正则表达式功能: dotAll 标志、命名捕获组、Unicode 属性转义和后视断言。最后,它包括对象静止和展开属性。

ES2019

ECMAScript 2019 引入了一些新的内置函数: flat on flatMap Array.prototype 用于扁平化数组,用于直接将 的返回值转换为新对象, Object.fromEntries trimStart trimEnd 以及作为广泛实现但非标准 String.prototype.trimLeft 和 trimRight 内置的更好命名的 Object.entries 替代方案 String.prototype 。此外,它还包括对语法和语义的一些小更新。更新的语法包括可选的捕获绑定参数,并允许字符串文本中的 U+2028(行分隔符)和 U+2029(段落分隔符)与 JSON 对齐。其他更新包括要求 是 Array.prototype.sort 稳定的排序,要求 JSON.stringify 返回格式正确的 UTF-8,无论输入如何,以及通过要求它返回相应的原始源文本或标准占位符 Function.prototype.toString 来澄清。

ES2020

ECMAScript 2020 第 11 th 版引入了字符串 matchAll 的方法,为全局正则表达式生成的所有匹配对象生成迭代器; import() ,一种使用动态说明符异步导入模块的语法; BigInt ,用于处理任意精度整数的新数字基元; Promise.allSettled ,一种不会短路的新型承诺组合器; globalThis ,一种获取全局 this 价值的通用方式;在模块内使用的专用 export * as ns from 'module' 语法;提高枚举顺序的 for-in 标准化; import.meta ,模块中可用的主机填充对象,可能包含有关模块的上下文信息;以及添加两个新的语法功能以改进使用“nullish”值(null 或未定义):nullish mergeescing,一个值选择运算符;和可选的链接,一个属性访问和函数调用运算符,如果要访问/调用的值为空,则会短路。

ES2021

ECMAScript 2021 第 12 th 版引入了字符串 replaceAll 的方法; Promise.any ,一个承诺组合器,当输入值满足时短路; AggregateError ,一种新的错误类型,用于一次表示多个错误;逻辑赋值运算符 ( ??= , &&= , ||= ); WeakRef ,用于引用目标对象而不保留垃圾回收,以及 FinalizationRegistry ,管理在目标对象进行垃圾回收时执行的清理操作的注册和注销;数字文字的分隔符 ( 1_000 );并且 Array.prototype.sort 更加精确,减少了导致实现定义的排序顺序的事例数量。

ES2022

ECMAScript 2022 第 13 th 版引入了顶级 await ,允许在模块的顶层使用关键字;新的类元素:公共和私有实例字段、公共和私有静态字段、私有实例方法和访问器以及私有静态方法和访问器;类内的静态块,用于执行每个类的评估初始化;语法 #x in obj ,用于测试对象上是否存在私有字段;正则表达式通过 /d 标志匹配索引,为匹配的子字符串提供开始和结束索引; Error 对象的 cause 属性,可用于记录错误中的因果链;字符串、数组和类型数组 at 的方法,允许相对索引;和 Object.hasOwn ,是 的 Object.prototype.hasOwnProperty 便捷替代方法。

ES2023

ECMAScript 2023 第 14 th 版介绍了 、 toSorted 、 toReversed with findLast 和 和 findLastIndex 上的方法,以及 上 Array.prototype TypedArray.prototype Array.prototype 的方法 toSpliced ;增加了对文件开头注释的支持 #! ,以更好地方便可执行的 ECMAScript 文件;并允许在弱集合中使用大多数符号作为键。