1. 关于 ECMAScript 6 (ES6)
目录
请支持本书:购买 (PDF, EPUB, MOBI)捐赠
(广告,请不要屏蔽。)

1. 关于 ECMAScript 6 (ES6)



虽然花费了很长时间,但 ECMAScript 6,JavaScript 的下一个版本,终于成为了现实。

接下来的部分将解释 ES6 世界中的一些重要概念。

1.1 TC39(Ecma 技术委员会 39)

TC39(Ecma 技术委员会 39) 是负责 JavaScript 发展的委员会。其成员是各个公司(其中包括所有主要的浏览器供应商)。TC39 定期召开会议,成员公司派出的代表和受邀专家都会参加会议。会议纪要 在线提供,可以让您很好地了解 TC39 的运作方式。

1.2 ECMAScript 6 的设计过程

ECMAScript 6 的设计过程以特性的*提案*为中心。提案通常是由开发者社区的建议引发的。为了避免委员会式设计,提案由*负责人*(1-2 名委员会代表)维护。

一个提案在成为标准之前要经历以下步骤:

【本节来源:David Herman 的“Harmony 进程”。】

1.2.1 ES6 之后的设计过程

从 ECMAScript 2016 (ES7) 开始,TC39 将对发布进行时间限制。ECMAScript 将每年发布一个新版本,其中包含当时已准备好的所有特性。这意味着从现在开始,ECMAScript 的版本将是相对较小的升级。有关新流程的更多信息,包括已完成和即将推出的特性提案,请参阅 GitHub 存储库 ecma262

1.3 JavaScript 与 ECMAScript

JavaScript 是每个人对这种语言的称呼,但这个名字是商标(由 Oracle 公司拥有,该公司从 Sun 公司继承了该商标)。因此,JavaScript 的官方名称是*ECMAScript*。这个名字来自管理该语言标准的标准组织 Ecma。自 ECMAScript 诞生以来,该组织的名称已从首字母缩略词“ECMA”改为正式名称“Ecma”。

JavaScript 的版本由带有该语言官方名称的规范来定义。因此,JavaScript 的第一个标准版本是 ECMAScript 1,它是“ECMAScript 语言规范,第 1 版”的缩写。ECMAScript x 通常缩写为 ESx。

1.4 升级到 ES6

Web 上的利益相关者是:

这些群体彼此之间的控制力非常小。这就是升级 Web 语言如此具有挑战性的原因。

一方面,升级引擎具有挑战性,因为它们要面对 Web 上各种各样的代码,其中一些代码非常古老。您还希望引擎升级对用户来说是自动且不可见的。因此,ES6 是 ES5 的超集,没有任何内容被移除1。ES6 在不引入版本或模式的情况下升级了该语言。它甚至设法使严格模式成为事实上的默认模式(通过模块),而没有增加它与非严格模式之间的隔阂。所采用的方法称为“One JavaScript”,并在 单独的章节 中进行了说明。

另一方面,升级代码也具有挑战性,因为您的代码必须在目标受众使用的所有 JavaScript 引擎上运行。因此,如果您想在代码中使用 ES6,您只有两种选择:您可以等到您的目标受众中没有人再使用非 ES6 引擎。这将需要数年时间;当 ES6 在 2015 年 6 月成为标准时,主流受众才刚刚开始使用 ES5。而 ES5 是在 2009 年 12 月才被标准化的!或者,您可以将 ES6 编译为 ES5 并立即使用它。有关如何做到这一点的更多信息,请参阅“设置 ES6”一书,该书可以在线免费阅读。

在 ES6 的设计中,目标和需求发生了冲突:

1.5 ES6 的目标

Harmony/ES6 的原始项目页面 提到了几个目标。在以下小节中,我将介绍其中的一些目标。

1.5.1 目标:成为更好的语言

目标是:成为一种更好的语言,用于编写:

  1. 复杂的应用程序;
  2. 这些应用程序共享的库(可能包括 DOM);
  3. 针对新版本的代码生成器。

子目标 (i) 承认用 JavaScript 编写的应用程序规模已经变得非常庞大。ES6 中一个满足这一目标的关键特性是内置模块。

模块也是对目标 (ii) 的回应。顺便说一句,DOM 是出了名的难以用 JavaScript 实现。ES6 代理 应该对此有所帮助。

添加了一些特性,主要是为了更容易地编译成 JavaScript。两个例子是:

它们都对例如通过 Emscripten 将 C/C++ 编译成 JavaScript 很有用。

1.5.2 目标:改进互操作性

目标是:改进互操作性,尽可能采用事实上的标准。

例如:

1.5.3 目标:版本控制

目标是:保持版本控制尽可能简单和线性。

如前所述,ES6 通过“One JavaScript”避免了版本控制:在 ES6 代码库中,所有内容都是 ES6,没有特定于 ES5 的部分。

1.6 ES6 特性分类

ES6 规范的介绍列出了所有新特性:

【ECMAScript 6】的一些主要增强包括模块、类声明、词法块作用域、迭代器和生成器、用于异步编程的 Promise、解构模式以及正确的尾调用。ECMAScript 内置库已经扩展,以支持更多的数据抽象,包括映射、集合和二进制数值数组,以及对字符串和正则表达式中 Unicode 补充字符的额外支持。现在可以通过子类化来扩展内置库。

主要有三类特性:

1.7 ECMAScript 简史

本节介绍了 ECMAScript 6 的发展历程。

1.7.1 早期:ECMAScript 1-3

1.7.2 ECMAScript 4(2008 年 7 月放弃)

ES4 的工作是在 1999 年 ES3 发布后开始的。2003 年,发布了一份中期报告,之后 ES4 的工作暂停。Adobe(在 ActionScript 中)和 Microsoft(在 JScript.NET 中)实现了中期报告中描述的语言子集。

2005 年 2 月,Jesse James Garrett 观察到,一种技术组合在使用 JavaScript 实现动态前端应用程序方面变得流行起来。他将这些技术称为 Ajax。Ajax 使得一类全新的 Web 应用程序成为可能,并导致人们对 JavaScript 的兴趣激增。

这可能促使 TC39 在 2005 年秋季恢复了 ES4 的工作。他们将 ES4 基于 ES3、ES4 中期报告以及 ActionScript 和 JScript.NET 的经验。

当时有两个小组在致力于未来的 ECMAScript 版本:

这两组对 JavaScript 的未来存在分歧,并且他们之间的紧张关系持续加剧。

1.7.3 ECMAScript Harmony

2008 年 7 月底,TC39 在奥斯陆举行了一次会议,Brendan Eich 描述 其结果如下

JavaScript 标准机构 Ecma 的技术委员会 39 已分裂一年多,这已不是什么秘密,一些成员支持 ES4 […],而另一些成员则主张 ES3.1 […]。现在,我很高兴地宣布,分裂已经结束。

在会议上达成的协议包括四个要点

  1. 开发 ECMAScript 的增量更新(后来成为 ECMAScript 5)。
  2. 开发一个主要的新版本,该版本比 ECMAScript 4 更温和,但在范围上比 ECMAScript 3 之后的版本大得多。此版本代号为 *Harmony*,以纪念其诞生的会议性质。
  3. 将放弃 ECMAScript 4 中的以下特性:包、命名空间、早期绑定。
  4. 其他想法将在与所有 TC39 成员达成共识的情况下进行开发。

因此:ES4 小组同意降低 Harmony 的激进程度,而 TC39 的其他成员则同意继续推进。

ECMAScript 的后续版本是

下一页:2. 常见问题解答:ECMAScript 6