什么是 JavaScript
JavaScript 历史回顾
- 早些年,随着 Web 应用日趋复杂,为验证简单的表单而需要大量与服务器的往返通信成为用户的痛点,因此开发者对客户端脚本语言的需求也越来越强烈。
- 1995 年,网景公司一位名叫 Brendan Eich 的工程师,开发了一个叫 Mocha(后来改名为 LiveScript)的脚本语言,随后网景与 Sun 公司结为开发联盟,共同完善 LiveScript 的开发。在大名鼎鼎的 Netscape Navigator 2 正式发布前,为了搭上媒体当时热烈炒作 Java 的顺风车,网景把 LiveScript 改名为 JavaScript。
- 1996 年 8 月,微软重磅进入 Web 浏览器领域。在 Netscape Navigator 3 发布后不久,微软发布了 IE3,其中包含自己名为 JScript 的 JavaScript 实现。然而这导致 JavaScript 还没有规范的语法、特性及标准的问题更加突出。
- 1997 年,网景的 JavaScript 1.1 作为提案被提交给欧洲计算机制造商协会(Ecma)。第 39 技术委员会(TC39)承担了 “标准化一门通用、跨平台、厂商中立的脚本语言的语法和语义” 的任务。TC39 委员会花了数月时间打造出 ECMA-262,也就是 ECMAScript(发音为“ek-ma-script”)这个新的脚本语言标准。
- 1998 年,国际标准化组织(ISO)和国际电工委员会(IEC)也将 ECMAScript 采纳为标准(ISO/ IEC-16262)。
- 自此以后,各家浏览器均以 ECMAScript 作为自己 JavaScript 实现的依据,虽然具体实现各有不同。
JavaScript 实现
- 虽然 JavaScript 和 ECMAScript 基本上是同义词,但 JavaScript 远远不限于 ECMA-262 所定义的那样。它包含以下三部分:
- 核心(ECMAScript)
- 文档对象模型(DOM)
- 浏览器对象模型(BOM)
ECMAScript
- ECMAScript,即 ECMA-262 定义的语言,并不局限于 Web 浏览器。
- ECMA-262 将这门语言作为一个基准来定义,以便在它之上再构建更稳健的脚本语言。
- Web 浏览器只是 ECMAScript 实现可能存在的一种宿主环境
- 宿主环境提供 ECMAScript 的基准实现和与环境自身交互必需的扩展。
- 扩展(比如 DOM)使用 ECMAScript 核心类型和语法,提供特定于环境的额外功能。
- 其他宿主环境还有服务器端 JavaScript 平台 Node.js 和即将被淘汰的 Adobe Flash。
- ECMA-262 在基本的层面,它描述这门语言的如下部分:语法、类型、语句、关键字、保留字、操作符、全局对象。
- ECMAScript 只是对实现这个规范描述的所有方面的一门语言的称呼
- JavaScript 实现了 ECMAScript,而 Adobe ActionScript 同样也实现了 ECMAScript。
ECMAScript 版本
- ECMA-262 的第 1 版本质上跟网景的 JavaScript 1.1 相同, 只不过删除了所有浏览器特定的代码,外加少量细微的修改。
- ECMA-262 第 6 版,俗称 ES6、ES2015 或 ES Harmony(和谐版),于 2015 年 6 月发布。
- 这一版包含了大概这个规范有史以来最重要的一批增强特性。
- ES6 正式支持了类、模块、迭代器、生成器、箭头 函数、期约、反射、代理和众多新的数据类型。
- 当然还有其他版本,此处不做过多描述
DOM
- 文档对象模型(DOM,Document Object Model)是一个应用编程接口(API),用于在 HTML 中使 用扩展的 XML。
- DOM 将整个页面抽象为一组分层节点。
- HTML 或 XML 页面的每个组成部分都是一种 节点,包含不同的数据。
- DOM 通过创建表示文档的树,让开发者可以随心所欲地控制网页的内容和结构。使用 DOM API,可以轻松地删除、添加、替换、修改节点。
- DOM 并非只能通过 JavaScript 访问,而且确实被其他很多语言实现了。
- 不过对于浏览器来说,DOM 就是使用 ECMAScript 实现的,如今已经成为 JavaScript 语言的一大组成部分。
- 为了防止网景和微软各行其是,导致开发者面向浏览器开发网页的情况发生,万维网联盟(W3C,World Wide Web Consortium)开始了制定 DOM 标准的进程。
BOM
- IE3 和 Netscape Navigator 3 提供了浏览器对象模型(BOM) API,用于支持访问和操作浏览器的窗口。
- 使用 BOM,开发者可以操控浏览器显示页面之外的部分,主要提供了操作浏览器窗口和子窗口的相关 API。
- 因为在很长时间内 BOM 都没有标准,所以每个浏览器实现的都是拥有自身特性的 BOM。
- HTML5 改变了这个局面,这个版本的 HTML 以正式规范的形式涵盖了尽可能多的 BOM 特性,未来 BOM 的实现细节应该会日趋一致。
小结
- JavaScript 是一门用来与网页交互的脚本语言,包含以下三个组成部分
- ECMAScript:由 ECMA-262 定义并提供核心功能
- 文档对象模型(DOM):提供与网页内容交互的方法和接口
- 浏览器对象模型(BOM):提供与浏览器交互的方法和接口
- JavaScript 的这三个部分得到了各浏览器厂商不同程度的支持,所有浏览器基本上对 ES5(ECMAScript 5)提供了完善的支持,对 ES6(ECMAScript 6)及以后版本的支持度也在不断提升