Skip to content

ECMAScript 特性

相关概念

本文参考了 关于 ECMASCRIPT 发展史和现状

Ecma

Ecma International(以下简称 Ecma) 是一个致力于信息和通信系统标准化的行业协会。Ecma 包含了许多不同的技术委员会,去处理不同领域的工作。

TC39

Ecma 的技术工作由技术委员会(Technical Committees,简写 TCs)和任务组(Task Groups,简写TGs)执行,技术委员会或任务组处理特定领域或主题。Ecma 成员被鼓励去参与 TCs 和 TGs 的工作。

如技术委员会 TC39 ,其下有工作组 TG1、TG2、TG3,所以可以写成 TC39-TG1、TC39-TG2、TC39-TG3。

TC39 致力于 ECMAScript 的标准化工作。

TC39 每两个月举行一次面对面会议,通常在西海岸举行,但每年在欧洲举行一次会议。此外,至少有一次会议在华盛顿州雷德蒙德举行(通常为 7 月会议)。

ECMA-262

ECMA-262 指的是 ECMAScript 标准,也就是 ECMAScript 最新版语言规范。

ECMAScript

ECMAScript 是一种用于开发具有动态行为的 WEB 应用的编程语言,其标准化工作由技术委员会 TC39 完成。

ECMAScript 通常也被称作 JavaScript。ECMAScript 是 Ecma International 的注册商标(ECMAScript®),JavaScript 是甲骨文的商标(JavaScript

® 和 ™ 的区别: 只有已注册商标可以标注®,未注册商标则不可以使用该标注。™并非法律规定的商标标注,既可以使用在注册商标,也可以使用在未注册商标,用于告知消费者该标志属于商标。至于是注册还是未注册商标,则™并不能进行区分

TC39 处理 ECMAScript 新特性的工作流程

本文参考了 TC39 处理 ECMAScript 新特性的工作流程proposal process

本章解释了所谓 TC39 的工作流程,它以 ECMAScript 2016(ES7)为起点,阐述了ECMAScript特性的设计。

1 谁设计了 ECMAScript ?

答案是:TC39(技术委员会39)。

TC39,是一个推动 JavaScript 发展的技术委员会。其成员是公司(其中包括所有主要浏览器厂商)。TC39 定期举行会议,其会议是由成员公司派代表和特邀专家出席。会议纪要可 在线获取 ,以便于我们更好的了解 TC39 工作流程。

偶尔(甚至在这本书中),你会看到 TC39 成员指的是某一个人。 它的意思是:由 TC39 成员公司派出的代表。

有趣的是,TC39 以协商一致方式运作:决定要求大多数人同意,没有人强烈反对。 对于许多成员来说,一致通过的决议将会产生真正的义务(他们将必须实现这些达成一致的功能等)。

2 ECMAScript是如何设计的?

2.1 问题: ECMAScript 2015 (ES6)是一个包含了过多内容的发布

最近发布的 ECMAScript , ECMAScript 2015(ES6)包含功能过多,在 ES5(2009年12月 -- 2015年6月)之后差不多 6 年才被标准化。 两个版本发布相隔这么长时间,有两个主要问题:

  • 对于稍早已经实现的功能必须等到整个版本完成后才能发布。
  • 这些经过漫长等待的功能会在压力下打包,因为错过了这次发布意味着又一次的漫长等待才能发布。而且这些功能也有可能导致本次发布延迟。

因此,从 ECMAScript 2016(ES7)开始,发布将更频繁,因此内容会更小。 每年将发布一个版本,它将包含在截止日期之前完成的所有功能。

2.2 解决方案:TC39 过程

ECMAScript 功能的每个提案都将经过以下几个阶段逐渐成熟,从阶段 0 开始。从一个阶段到下一个阶段的推进必须由 TC39 批准。

2.2.1 阶段0: 稻草人(头脑风暴式的提案)

它是什么? 一种自由形式的提交推进 ECMAScript 的想法。 提案意见书必须由 TC39 的成员或者 已经注册成TC39贡献者  的非成员提出。

需要什么? 该意见书必须在 TC39 会议进行审查(来源 ),然后将其添加到阶段 0 的提案页面中

2.2.2 阶段1: 建议

这是什么? 功能正式的提案。

需要什么? 必须确定所谓的提案负责人。该负责人或者协同负责人必须是 TC39 成员 (来源 )。该提案所解决的问题必须说明清楚。解决方案必须通过实例描述,一个 API 和一个有关语义和算法的讨论。最后,必须明确该提案的潜在障碍,比如和其它功能的交互或者实现挑战。建议的实现方式、 polyfills 和演示也是必须的。

下一步是什么? 通过了阶段 1,才意味着 TC39 愿意来进行审议,讨论并为该提案付诸努力。再往下,将预计该提案所带来的主要变化。

2.2.3 阶段2: 草案

这是什么? 提案将在规范中的第一个版本。 这个版本也可能是该特性纳入标准的最终版本。

需要什么? 该提案现在必须有该特性的语法和语义的形式描述(使用 ECMAScript 规范的形式语言)。描述应尽可能完整,但可以包含 todos 和 占位符 。该功能必须要有两个实验实现,但其中的一个可以通过transpiler(转译器)实现,比如 Babel。

下一步是什么? 从现在开始,一般只会有一些增量变化。

2.2.4 阶段3: 候选

这是什么? 该提案已经基本完成,现在需要实现和用户的反馈,以便进一步推进。

需要什么? 该规范文本必须是完整的。指定评审员(由TC39任命,而不是负责人)和 ECMAScript 的规范编写人必须在规范文本上签字。必须有至少两个符合规范的实现(默认情况下不必启用)。

下一步是什么? 从此以后,只有在实现或其应用引发重大问题时,才会对该提案做出修改。

2.2.5 阶段4: 完成

这是什么? 该提案已准备好纳入标准。

需要什么? 在提案可以达到这个阶段之前,需要做以下事情:

  • 测试262 验收测试(大致为语言特性的单元测试,用JavaScript编写);
  • 两个符合规范的实现通过测试;
  • 对于该实现的显著实践;
  • ECMAScript的规范编写人必须在规范文本签字

下一步是什么? 该提案将尽快纳入 ECMAScript 规范。 当规范以年度批准为标准的时候,这个提案就被批准为一部分。

不要叫他们的 ECMAScript 20XX 特性

正如你所看到的,一旦提案进入阶段4,你也只能确保该提案将被包含在标准。而且,将其列入下一版本的 ECMAScript 是可能的,但也不是100%确定(可能需要更长的时间)。因此,你不能叫该提案:"ES7特性" 或 "ES2016特性" 了。因此,我的两个写标题的文章和博客的最喜欢的方法是:

  • "ECMAScript 提案: the XXX feature"。该提案的阶段在本文开头提到。
  • "ES.阶段2: the XXX feature"

如果一个提案是已经进入阶段4,我可以叫它 ES20xx 特性,但最安全的还是要等到规范编写人证实了它将被包含在哪个发布中后。Object.observe 是一个例子,它进入阶段 2 后,却最终却被撤回了。

最新版语言规范和历史版本

最新版语言规范和历史版本

注意,通过上述看到的是某版本的完整语言规范,而不是仅仅相对上一个版本的新特性。

标准委员会决定,每年6月正式发布一次标准,作为当年的正式版本。接下来的时间就在这个版本的基础上进行改动,知道下一年的6月份,草案就自然变成了新一年的版本。

截止当前时间 2021/11/14,最新版本和历史版本有

版本发布日期官方名称
11997年6月ES1
21998年8月ES2
31999年12月ES3
4不存在ES4
52009年12月ES5
5.12011年6月ES5.1
62015年6月ES2015
72016年6月ES2016
82017年6月ES2017
92018年6月ES2018
102019年6月ES2019
112020年6月ES2020
122021年6月ES2021

下一个年度版本将在2022年6月产生,新版本包含所有在2022年3月前已经到达阶段4的提案。

为什么有时 ES 版本会以版本编号引用,有时却按年份引用

在 ES2015 之前,ECMAScript 规范通常按其版本命名。 因此,ES5 是 2009 年更新发布的ECMAScript 规范的官方名称。

为什么会这样呢? 在 ES2015 诞生的过程中,这个名字从 ES6 变成了 ES2015 ,原因是由于这个过程比较晚,人们仍然把它习惯性的称为 ES6 ,社区并不是忘记了 ES2015 版本的命名 —— 只不过大家仍然在按照版本号来称呼 ES 的版本。