深入理解 JavaScript 特性 (1):ECMAScript 和 JavaScript 的未来 1&1.1

阅读数:13 2019 年 11 月 24 日 22:21

深入理解JavaScript特性(1):ECMAScript和JavaScript的未来 1&1.1

(ECMAScript 和 JavaScript 的未来)

内容简介
本书旨在让读者轻松学习 JavaScript 的新进展,包括 ES6 及后续更新。书中提供了大量实用示例,以循序渐进的方式讲解了异步函数、对象解构、动态导入及异步生成器等内容。本书不仅介绍了箭头函数、解构、模板字面量以及其他语法方面的新元素,还全面展示了 ES6 引入的流程控制机制,以及如何高效地简化自己的代码。本书的讨论还涉及 ES6 内置的新集合类型、使用代理控制属性访问、ES6 中内置 API 的改进、CommonJS 与 ECMAScript 模块的互用性等方面。

JavaScript 已经从 1995 年的一个为了赢得战略优势的市场营销策略,变成了如今(2017 年)世界上使用最广泛的应用运行平台中的核心编程语言。该语言不再只是在浏览器中运行,现在也用于创建桌面和移动应用,还用于硬件设备,甚至是 NASA 的太空服设计。

JavaScript 是如何做到这一步的,接下来它又会怎么做呢?


(JavaScript 标准简史)

1995 年,NetScape 公司想要构建一个动态的网页,但 HTML 无法实现这一点。为此,他们雇用 Brendan Eich 专门为浏览器开发一门功能类似于 Scheme 的语言。Brendan 加入之后,得知上级主管希望这门语言的语法像 Java,而且这一决定已经开始实施。

Brendan 花 10 天写出了 JavaScript 的第一个原型,主要实现了 Scheme 的一类函数和 Self 的原型等构造。这个初始版 JavaScript 的代号为 Mocha。它没有数组,没有对象字面量,任何错误都会给出警告。此外,它也没有异常处理,这也是如今仍有很多操作返回 NaNundefined 的原因。Brendan 对 DOM0 级和 JavaScript 第一个版本的实现成为了这门语言标准化的基础。

1995 年 9 月,Netscape Navigator 2.0 beta 版发布,JavaScript 的修订版也内置其中,对外宣传时名叫 LiveScript。同年 12 月,Navigator 2.0 beta 3 发布,此时 LiveScript 又重新命名为 JavaScript(后成为 Sun 的注册商标,Sun 现在是 Oracle 旗下公司)。这次发布后不久,Netscape 公司推出了服务器端 JavaScript 的实现,用于在 Netscape Enterprise Server 上运行脚本,并将其命名为 LiveWire。11996 年,微软在 IE3 中推出 JScript,即通过逆向工程实现的 JavaScript。JScript 在服务器端也可以在互联网信息服务器(IIS,Internet information server)中运行。

1 1998 年的这个小册子( https://docs.oracle.com/cd/E19957-01/816-6411-10/contents.htm )详细介绍了服务器端 JavaScript 以及 LiveWire 的方方面面。

1996 年,ECMA 的一个技术委员会 TC39 将 JavaScript 以名称 ECMAScript(ES)标准化为 ECMA-262 规范。为什么叫 ECMAScript 呢?因为 Sun 不同意将 JavaScript 商标转让给 ECMA,虽然微软提议叫 JScript,但其他成员公司又不想用,结果就只能使用 ECMAScript 这个尴尬的名字。

当时,TC39 开会主要就是争论该采用 Netscape 的 JavaScript,还是微软的 JScript。尽管如此,该委员会还是取得了成果,他们坚定不移地支持向后兼容,推动引入了严格相等运算符(===!==),不会影响依赖松散相等比较算法的现有程序。

ECMA-262 的第一版于 1997 年 6 月发布。次年 6 月,国际标准化组织对这个规范进行了完善和认真审查,并以 ISO/IEC 16262 的形式发布,这就是它的第二版。

1999 年 12 月发布的第三版标准化了正则表达式、switch 语句、do/whilletry/catchObject#hasOwnProperty,以及其他一些特性。其中大部分特性已经可以在 Netscape 的 JavaScript 运行环境 SpiderMonkey 中使用。

之后不久,TC39 发布了 ES4 规范的草案。ES4 的早期工作直接导致了 2000 年年中 JScript.NET 的产生 2,并最终促进 2006 年 Flash 中 ActionScript 3 的诞生。3

2 可以在微软网站上找到最初的公告(2000 年 7 月)。

3 Brendan Eich 在播客 JavaScript Jabber 中介绍了很多关于 JavaScript 起源的故事。

此时,关于 JavaScript 应该朝哪个方向发展的不同意见导致了规范制定工作停滞不前。对于 Web 标准的发展而言,这时的情形很微妙:微软几乎垄断了 Web 行业,却对制定标准毫无兴趣。

2003 年,AOL 裁掉了 50 名 Netscape 员工 4,Mozilla 基金会随之成立。同时,由于微软占据了超过 95% 的 Web 浏览器市场份额,TC39 被迫解散。

4 2003 年 7 月的 The Mac Observer 有该新闻的相关报道。

直到两年后,Brendan 在 Mozilla 以 Firefox 日益增长的市场份额为杠杆使得微软回归,ECMA 才得以重新开始 TC39 的相关工作。2005 年年中,TC39 再次开始召开定期会议。对于 ES4,计划引入模块系统、类、迭代器、生成器、解构、类型注释、尾调用优化、代数类型以及其他各类功能。这次的新增内容过于庞大,导致 ES4 一次又一次地延期了。

2007 年,TC39 分裂为两派:一派主张推出 ES3.1,即只在 ES3 的基础上完善改进;另一派则主张推出 ES4,新特性繁多,且亟待规范化。直到 2008 年 8 月 5,两派才就 ES3.1 达成一致,ES3.1 后来又发展为 ES5。ES4 的提议似乎废弃了,但实际上其中很多特性最终写进了 ES6(达成和解时美其名曰 Harmony,即“和谐”),当然,其中一些特性还在讨论,另外少数特性确实已经废弃、被拒或撤销。ES3.1 也为 ES4 的逐步实现奠定了基础。

5 2008 年,Brendan Eich 给 es-discuss 发了一封邮件,其中介绍了当时的情况,此时距 ES3 发布都快 10 年了。

2009 年 12 月,ES3 发布 10 周年,ECMAScript 第五版发布。这一版汇集了当时浏览器中业已存在的扩展,或者说“事实标准”,增加了 getset 存取器,增强了 Array 原型的函数特性,还引入了反射和内省机制,以及对 JSON 解析和严格模式的支持。

2011 年 6 月,经过再次审查和编辑,该规范形成了第三版的国际标准 ISO/IEC 16262:2011,并作为 ECMAScript 5.1 发布。

2015 年 6 月,TC39 又花 4 年完成了 ECMAScript 6。第六版是该语言面世以来改动最大的一个版本,实现了许多 ES4 中被推迟到 Harmony 中的提案。本书主要探讨的就是 ES6。

在 ES6 的制定过程中,另一个旨在推动 Web 发展的组织 WHATWG(网页超文本应用技术工作小组)于 2012 年推出了一个文档,以记录 ES5.1 和浏览器实现在兼容性和可操作性方面的差异。这个工作小组标准化了之前规范中没有提及的 String#substr,统一了在 HTML 标签中包装字符串的几种方法,明确写出了 Object.prototype 中的 __proto____defineGeter__ 等原型属性,同时还做出了其他一些改进。6 这些工作最终形成了一份独立的 Web ECMAScript 规范,最终于 2015 年被加入到附录 B 中。附录 B 是 ECMAScript 核心规范中的参考部分,这意味着浏览器可以不遵照其进行实现。此次更新之后,附录 B 也成为了 Web 浏览器的规范和要求。

6 要想了解将 Web ECMAScript 规范合并到主干时所做的全部更改,请参见 WHATWG 博客。

第六版是 JavaScript 历史上一个意义重大的里程碑。除了众多新功能之外,ES6 也是 ECMAScript 成为持续迭代标准的一个转折点。

深入理解JavaScript特性(1):ECMAScript和JavaScript的未来 1&1.1

图灵地址 http://www.ituring.com.cn/book/2452

评论

发布