1.1 前言
本章简单回顾了JavaScript的历史,介绍了JavaScript 的实现(JavaScript的组成)。
1.2 MIND
1.3 JavaScript 历史回顾
1995 年,网景公司工程师Brendan Eich 正在为即将发布的 Netscape Navigator 2 开发一个叫 Mocha(后来改名为 LiveScript)的脚本语言。
为了赶上发布时间,网景与 Sun 公司结为开发联盟,共同完成 LiveScript 的开发。就在 Netscape 14 Navigator 2 正式发布前,网景把 LiveScript 改名为 JavaScript,以便搭上媒体当时热烈炒作 Java 的顺风车。
由于 JavaScript 1.0 很成功,网景又在 Netscape Navigator 3 中发布了 1.1 版本。这时,老对手微软发布IE3,包含自己名为 JScript(叫这个名字是为了 避免与网景发生许可纠纷)的 JavaScript 实现。
由于微软的入局导致同时存在两个不同版本的JavaScript,Netscape Navigator 中的 JavaScript,以 及 IE 中的 JScript。
1997 年,JavaScript 1.1 作为提案被提交给欧洲计算机制造商协会(Ecma)。第 39 技术委员会(TC39)承担了“标准化一门通用、跨平台、厂商中立的脚本语言的语法和语义”的任务(参见 TC39-ECMAScript)。TC39 委员会由来自网景、Sun、微软、Borland、Nombas 和其他对这门脚本语言有兴趣的公司的工程师组成。他们花了数月时间打造出 ECMA-262,也就是 ECMAScript(发音为“ek-ma-script”)这个新的脚本语言标准。
1998 年,国际标准化组织(ISO)和国际电工委员会(IEC)也将 ECMAScript 采纳为标准(ISO/ IEC-16262)。
1.4 JavaScript 实现
虽然 JavaScript 和 ECMAScript 基本上是同义词,但 JavaScript 远远不限于 ECMA-262 所定义的那样。 完整的 JavaScript 实现包含以下几个部分:
- 核心(ECMAScript) 由 ECMA-262 定义并提供核心功能
- 文档对象模型(DOM) 提供与网页内容交互的方法和接口
- 浏览器对象模型(BOM) 提供与浏览器交互的方法和接口
1.4.1 ECMAScript
ECMAScript,即 ECMA-262 定义的语言,并不局限于 Web 浏览器,Web 浏览器只是 ECMAScript 实现可能存在的一种宿主环境(host environment)。 宿主环境提供 ECMAScript 的基准实现和与环境自身交互必需的扩展。扩展(比如 DOM)使用 ECMAScript 核心类型和语法,提供特定于环境的额外功能。 其他宿主环境还有服务器端 JavaScript 平台 Node.js 和即将被淘汰 的 Adobe Flash。
ECMAScript 当前已经发布了11(此书写作时为10个版本)个版本,其中的第 6 版俗称 ES6、ES2015 或 ES Harmony(和谐版),于 2015 年 6 月发布。这一版包含了大概这个规范有史以来最重要的一批增强特性。ES6 正式支持了类、模块、迭代器、生成器、箭头 函数、期约、反射、代理和众多新的数据类型。
1.4.2 DOM
文档对象模型(DOM,Document Object Model) 是一个应用编程接口(API),用于在 HTML 中使用扩展的 XML。DOM 将整个页面抽象为一组分层节点。HTML 或 XML 页面的每个组成部分都是一种节点,包含不同的数据。使用 DOM API,可以轻松地删除、添加、替换、修改节点。
1.4.2.1 DOM 的必要性
避免面向浏览器开发网页,万维网联盟(W3C,World Wide Web Consortium) 制定了 DOM 标准。
1.4.2.2 DOM 级别
1.4.3 BOM
IE3 和 Netscape Navigator 3 提供了浏览器对象模型(BOM) API,用于支持访问和操作浏览器的窗口。使用 BOM,开发者可以操控浏览器显示页面之外的部分。而 BOM 真正独一无二的地方,当然也是问题最多的地方,就是它是唯一一个没有相关标准的 JavaScript 实现。
BOM 主要针对浏览器窗口和子窗口(frame),包括特定于浏览器的扩展如:
- 弹出新浏览器窗口的能力
- 移动、缩放和关闭浏览器窗口的能力
- navigator 对象,提供关于浏览器的详尽信息
- location 对象,提供浏览器加载页面的详尽信息
- screen 对象,提供关于用户屏幕分辨率的详尽信息
- performance 对象,提供浏览器内存占用、导航行为和时间统计的详尽信息
- 对 cookie 的支持
- 其他自定义对象,如 XMLHttpRequest 和 IE 的 ActiveXObject