JavaScript 之 ECMAScript 版本速览
ECMAScript自1997年正式被发布为标准后,一直持续有新版本制定。
目前来讲,ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,英文:European Computer Manufacturers Association)在标准ECMA-262中定义的脚本语言规范。这种语言在万维网上应用广泛,我们常常称ECMAScript为JavaScript或JScript,后两者是ECMA-262标准的实现和扩展。
以下是到目前为止ECMAScript已发布的版本:
版本 | 正式名称 | 发布时间 | 与前版本的差异 |
---|---|---|---|
1 | ECMAScript 1 | 1997年6月 | 第一版 |
2 | ECMAScript 2 | 1998年6月 | 格式修正,以使得其形式与ISO/IEC16262国际标准一致 |
3 | ECMAScript 3 | 1999年12月 | 强大的正则表达式,更好的词法作用域链处理,新的控制指令,异常处理,错误定义更加明确,数据输出的格式化及其它改变 |
4 | ECMAScript 4 | 被放弃 | 由于关于语言的复杂性出现分歧,第4版本被放弃,其中的部分成为了第5版本及Harmony的基础;由ActionScript实现 |
5 | ECMAScript 5 | 2009年12月 | 新增“严格模式(strict mode)”,一个子集用作提供更彻底的错误检查,以避免结构出错。澄清了许多第3版本的模糊规范,并适应了与规范不一致的真实世界实现的行为。增加了部分新功能,如getters及setters,支持JSON以及在对象属性上更完整的反射 |
5.1 | ECMAScript 5.1 | 2011年6月 | ECMAScript标5.1版形式上完全一致于国际标准ISO/IEC 16262:2011。 |
6 | ECMAScript 2015 | 2015年6月 | ECMAScript 2015(ES2015),第 6 版,最早被称作是 ECMAScript 6(ES6),添加了类和模块的语法,其他特性包括迭代器,Python风格的生成器和生成器表达式,箭头函数,二进制数据,静态类型数组,集合(maps,sets 和 weak maps),promise,reflection 和 proxies。作为最早的 ECMAScript Harmony 版本,也被叫做ES6 Harmony。 |
7 | ECMAScript 2016 | 2016年6月 | ECMAScript 2016(ES2016),第 7 版,多个新的概念和语言特性 |
8 | ECMAScript 2017 | 2017年6月 | ECMAScript 2017(ES2017),第 8 版,多个新的概念和语言特性 |
9 | ECMAScript 2018 | 2018年6月 | ECMAScript 2018 (ES2018),第 9 版,包含了异步循环,生成器,新的正则表达式特性和 rest/spread 语法 |
10 | ECMAScript 2019 | 2019年6月 | ECMAScript 2019 (ES2019),第 10 版 |
12 | ECMAScript 2020 | 2020年6月 | ECMAScript 2020 (ES2020),第 11 版 |
13 | ECMAScript 2021 | 2021年6月 | ECMAScript 2021 (ES2021),第 12 版 |
14 | ECMAScript 2022 | 2022年6月 | ECMAScript 2022 (ES2022),第 13 版 |
15 | ECMAScript 2023 | 2023年6月 | ECMAScript 2023 (ES2023),第 14 版 |
16 | ECMAScript 2024 | 2024年6月 | ECMAScript 2024 (ES2024),第 15 版 |
ECMAScript版本由每年的ECMA大会批准并作为标准发布。所有的进展都在Ecma TC39 GitHub组织上公开,该组织托管提案、官方规范文本和会议记录。在ECMAScript第6版(称为ES6)之前,规范是几年发布一次,通常用它们的主要版本号来指代,譬如我们常说的ES3、ES5。在ES6之后,规范以发布年份命名(ES2017、ES2018 等)。准确来讲ES6是ES2015的代名词,但日常工作中,工程师们习惯将6版本之后的版本统称做ES6。这是因为自2015年ES6发布起,ECMA 大会每年都会发布新版本的ECMAScript,发布频率如此频繁,累积版本也比较多,大家习惯将6版本之后的版本统称做ES6。那么什么是ESNext呢?这就不得不说到ECMAScript的发布流程了。
ECMAScript 发布四阶段
TC39(Technical Committee 39)属于Ecma International组织,负责ECMAScript标准的制定和发布。在发布ECMAScript 6之后,TC39团队制定了新的ECMAScript发布流程,名字为TC39进程。这个发布进程的各个阶段如图所示。
- Stage 0:代号“稻草人(strawman)”,草案阶段。
任何讨论、想法、改变或者还没加到提案的特性都在这个阶段。只有TC39成员可以提交。- Stage 1:代号“提案(proposal)”, TC39 帮助阶段
- 产出一个正式的提案。
- 发现潜在的问题,例如与其他特性的关系,实现难题。
- 提案包括详细的API描述,使用例子,以及关于相关的语义和算法。
- Stage 2:代号“草案(draft)”, 本阶段很有可能成为标准
- 提供一个初始的草案规范,与最终标准中包含的特性不会有太大差别。草案之后,原则上只接受增量修改。
- 开始实验如何实现,实现形式包括polyfill, 实现引擎(提供草案执行本地支持),或者编译转换(例如babel)
- Stage 3:代号“候选(candidate)”, 已完成,需要从实现中获得反馈
- 候选阶段,获得具体实现和用户的反馈。此后,只有在实现和使用过程中出现了重大问题才会修改。
- 规范文档必须是完整的,评审人和ECMAScript的编辑要在规范上签字。
- 至少要在一个浏览器中实现,提供polyfill或者babel插件。
- Stage 4:代号“结束(finished)”, 准备成为标准
- 已经准备就绪,该特性会出现在下个版本的ECMAScript规范之中。
- 需要通过有2个独立的实现并通过验收测试,以获取使用过程中的重要实践经验。
通常在第 3 或第 4 阶段时,JavaScript 引擎会实现这些提案,以供公众使用。有关TC39进程的更多信息,请参考The TC39 Process。
ESNext是一个动态名称,指的是ECMAScript下一个版本的内容。ESNext中的特性处在Stage 1到Stage 4阶段中,因为根据定义,规范尚未最终确定。