虽然花费了很长时间,但 ECMAScript 6,JavaScript 的下一个版本,终于成为了现实。
接下来的部分将解释 ES6 世界中的一些重要概念。
TC39(Ecma 技术委员会 39) 是负责 JavaScript 发展的委员会。其成员是各个公司(其中包括所有主要的浏览器供应商)。TC39 定期召开会议,成员公司派出的代表和受邀专家都会参加会议。会议纪要 在线提供,可以让您很好地了解 TC39 的运作方式。
ECMAScript 6 的设计过程以特性的*提案*为中心。提案通常是由开发者社区的建议引发的。为了避免委员会式设计,提案由*负责人*(1-2 名委员会代表)维护。
一个提案在成为标准之前要经历以下步骤:
【本节来源:David Herman 的“Harmony 进程”。】
从 ECMAScript 2016 (ES7) 开始,TC39 将对发布进行时间限制。ECMAScript 将每年发布一个新版本,其中包含当时已准备好的所有特性。这意味着从现在开始,ECMAScript 的版本将是相对较小的升级。有关新流程的更多信息,包括已完成和即将推出的特性提案,请参阅 GitHub 存储库 ecma262
。
JavaScript 是每个人对这种语言的称呼,但这个名字是商标(由 Oracle 公司拥有,该公司从 Sun 公司继承了该商标)。因此,JavaScript 的官方名称是*ECMAScript*。这个名字来自管理该语言标准的标准组织 Ecma。自 ECMAScript 诞生以来,该组织的名称已从首字母缩略词“ECMA”改为正式名称“Ecma”。
JavaScript 的版本由带有该语言官方名称的规范来定义。因此,JavaScript 的第一个标准版本是 ECMAScript 1,它是“ECMAScript 语言规范,第 1 版”的缩写。ECMAScript x 通常缩写为 ESx。
Web 上的利益相关者是:
这些群体彼此之间的控制力非常小。这就是升级 Web 语言如此具有挑战性的原因。
一方面,升级引擎具有挑战性,因为它们要面对 Web 上各种各样的代码,其中一些代码非常古老。您还希望引擎升级对用户来说是自动且不可见的。因此,ES6 是 ES5 的超集,没有任何内容被移除1。ES6 在不引入版本或模式的情况下升级了该语言。它甚至设法使严格模式成为事实上的默认模式(通过模块),而没有增加它与非严格模式之间的隔阂。所采用的方法称为“One JavaScript”,并在 单独的章节 中进行了说明。
另一方面,升级代码也具有挑战性,因为您的代码必须在目标受众使用的所有 JavaScript 引擎上运行。因此,如果您想在代码中使用 ES6,您只有两种选择:您可以等到您的目标受众中没有人再使用非 ES6 引擎。这将需要数年时间;当 ES6 在 2015 年 6 月成为标准时,主流受众才刚刚开始使用 ES5。而 ES5 是在 2009 年 12 月才被标准化的!或者,您可以将 ES6 编译为 ES5 并立即使用它。有关如何做到这一点的更多信息,请参阅“设置 ES6”一书,该书可以在线免费阅读。
在 ES6 的设计中,目标和需求发生了冲突:
Harmony/ES6 的原始项目页面 提到了几个目标。在以下小节中,我将介绍其中的一些目标。
目标是:成为一种更好的语言,用于编写:
子目标 (i) 承认用 JavaScript 编写的应用程序规模已经变得非常庞大。ES6 中一个满足这一目标的关键特性是内置模块。
模块也是对目标 (ii) 的回应。顺便说一句,DOM 是出了名的难以用 JavaScript 实现。ES6 代理 应该对此有所帮助。
添加了一些特性,主要是为了更容易地编译成 JavaScript。两个例子是:
Math.fround()
- 将数字舍入为 32 位浮点数Math.imul()
- 将两个 32 位整数相乘它们都对例如通过 Emscripten 将 C/C++ 编译成 JavaScript 很有用。
目标是:改进互操作性,尽可能采用事实上的标准。
例如:
目标是:保持版本控制尽可能简单和线性。
如前所述,ES6 通过“One JavaScript”避免了版本控制:在 ES6 代码库中,所有内容都是 ES6,没有特定于 ES5 的部分。
ES6 规范的介绍列出了所有新特性:
【ECMAScript 6】的一些主要增强包括模块、类声明、词法块作用域、迭代器和生成器、用于异步编程的 Promise、解构模式以及正确的尾调用。ECMAScript 内置库已经扩展,以支持更多的数据抽象,包括映射、集合和二进制数值数组,以及对字符串和正则表达式中 Unicode 补充字符的额外支持。现在可以通过子类化来扩展内置库。
主要有三类特性:
本节介绍了 ECMAScript 6 的发展历程。
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 的未来存在分歧,并且他们之间的紧张关系持续加剧。
2008 年 7 月底,TC39 在奥斯陆举行了一次会议,Brendan Eich 描述 其结果如下
JavaScript 标准机构 Ecma 的技术委员会 39 已分裂一年多,这已不是什么秘密,一些成员支持 ES4 […],而另一些成员则主张 ES3.1 […]。现在,我很高兴地宣布,分裂已经结束。
在会议上达成的协议包括四个要点
因此:ES4 小组同意降低 Harmony 的激进程度,而 TC39 的其他成员则同意继续推进。
ECMAScript 的后续版本是