第1章 什么是JavaScript
《JavaScript 高级程序设计(第四版)》早就想拜读了,一直到现在才决心认真看完并提炼出自己认为比较重要的部分以便回顾复习,文章所有内容均来自《JavaScript 高级及程序设计(第四版)》。
工业革命是钢铁铸就的,互联网革命则是 JavaScript 造就的。25 年的反复锻造与打磨,成就了 JavaScript 在今天的应用程序开发中毋庸置疑的统治地位,但并非一开始就是如此。——JavaScript高级程序设计
1995 年,JavaScript 问世。当时,它的主要用途是代替 Perl 等服务器端语言处理输入验证。如今,JavaScript 的应用也不再局限于数据验证,而是渗透到浏览器窗口及其内容的方方面面。
1.1 历史回顾
当时,大多数用户使用 28.8kbit/s 的 调制解调器上网。想一下,验证一个简单的表单可能都得需要30秒的时间,但是返回的结果可能是一个必填字段没有填写那得多苦恼。于是当时引领技术革新网景公司把开发一种客户端脚本语言来处理这样的简单数据验证提上日程。
1995年,网景公司的Brendan Eich,为即将发布Netscape Navigator 2 浏览器开发一 个叫 Mocha(后来改名为 LiveScript)的脚本语言。
随后网景公司与sun公司联盟,共同完成LiveScript开发。在Netscape Navigator 2 发布前,改名为JavaScript,蹭一下java当时的热度。JavaScript1.0很成功,于是在Netscape Navigator 3发布了1.1版本,引来了一股web热潮,之后微软在自己的IE3中加入了自己的Jscript的JavaScript实现,1996年8月微软加入了web浏览器领域。
这样就出现了Netscape Navigator 中的 JavaScript,和 IE 中的 JScript。随后承担这“标准化一门通用、跨平台、厂商中立的脚本语言的语法和语义” 的任务,欧洲计算机制造商协会(Ecma)第 39 技术委员会(TC39),花了数月时间打造出 ECMA-262,也就是 ECMAScript这个新的脚本语言标准。
1.2 JavaScript实现
JavaScript和 ECMAScript 基本上是同义词,但 JavaScript远远不限于 ECMA-262 所定义的那样。完整的 JavaScript 实现包含以下几个部分:
- 核心(ECMAScript)
- 文档对象模型(DOM)
- 浏览器对象模型(BOM)
1.2.1 ECMAScript
Web 浏览器只是 ECMAScript 实现可能存在的一种宿主环境,还有其他的宿主环境,比如有服务器端 JavaScript 平台 Node.js 和即将被淘汰 的 Adobe Flash。
如果不涉及浏览器的话,ECMA-262 在基本的层面,它描述这门语言的如下部分:
- 语法
- 类型
- 语句
- 关键字
- 保留字
- 操作符
- 全局对象
ECMAScript 只是对实现这个规范描述的所有方面的一门语言的称呼。JavaScript 实现了 ECMAScript。
1.ECMAScript 版本
ECMA-262 的第 1 版本质上跟网景的 JavaScript 1.1 相同
随后,ECMA-262 第 2 版、ECMA-262 第 3 版、ECMA-262 第 4 版、ECMA-262 的第 5 版相继发布
ECMA-262 第 6 版,俗称 ES6、ES2015 或 ES Harmony(和谐版),于 2015 年 6 月发布。这一版包含了大概这个规范有史以来最重要的一批增强特性。ES6 正式支持了类、模块、迭代器、生成器、箭头 函数、期约、反射、代理和众多新的数据类型。
从ES6之后还有ES7、ES8、ES9、ES10以及ES11相关的新特性大家可以自己查阅.
2.浏览器对 ECMAScript 的支持
到了 2008 年,五大浏览器(IE、Firefox、Safari、Chrome 和 Opera)全部兼容 ECMA-262 第 3 版。IE8 率先实现 ECMA-262 第 5 版,并在 IE9 中完整支持。Firefox 4 很快也做到了。
1.2.2 DOM
文档对象模型(DOM,Document Object Model)是一个应用编程接口(API),用于在 HTML 中使 用扩展的 XML。DOM 将整个页面抽象为一组分层节点。HTML 或 XML 页面的每个组成部分都是一种 节点,包含不同的数据。比如下面的 HTML 页面:
<html>
<head>
<title>Sample Page</title>
</head>
<body>
<p> Hello World!</p>
</body>
</html>
使用 DOM API, 可以轻松地删除、添加、替换、修改节点。
为什么DOM是必需的
由于网景和微软采用不同思路开发 DHTML(动态 HTML),开发者写一个 HTML 页面就要适配不同的浏览器。为了保持Web的跨平台性,万维网联盟(W3C,World Wide Web Consortium)开始了制定 DOM 的标准。
1998 年 10 月,DOM Level 1 成为 W3C 的推荐标准。这个规范由两个模块组成:DOM Core 和 DOM HTML。前者提供了一种映射 XML 文档,从而方便访问和操作文档任意部分的方式;后者扩展了前者, 并增加了特定于 HTML 的对象和方法。
DOM 标准在 Web 浏览器实现它之前就已经作为标准发布了。目前主流浏览器对DOM都有不同程度的支持。
1.2.3 BOM
IE3 和 Netscape Navigator 3 提供了浏览器对象模型(BOM)API,用于支持访问和操作浏览器的窗口。使用 BOM,开发者可以操控浏览器显示页面之外的部分。它是唯一一个没有相关标准的 JavaScript 实现,直到HTML5出现后,以正式规范的形式涵盖了尽可能多的 BOM 特性。
总体来说,BOM 主要针对浏览器窗口和子窗口(frame),人们通常会把任何特定于浏览器的扩展都归在 BOM 的范畴内。比如:
- 弹出新浏览器窗口的能力
- 移动、缩放和关闭浏览器窗口的能力
- navigator 对象,提供关于浏览器的详尽信息
- location 对象,提供浏览器加载页面的详尽信息
- screen 对象,提供关于用户屏幕分辨率的详尽信息
- performance 对象,提供浏览器内存占用、导航行为和时间统计的详尽信息
- 对 cookie 的支持
- 其他自定义对象,如 XMLHttpRequest 和 IE 的 ActiveXObject
因为在很长时间内都没有标准,所以每个浏览器实现的都是自己的 BOM。有一些所谓的事实标准, 比如对于 window 对象和 navigator 对象,每个浏览器都会给它们定义自己的属性和方法。现在有了 HTML5,BOM 的实现细节应该会日趋一致。
1.3 JavaScript 版本
多数浏览器对 JavaScript 的 支持,指的是实现 ECMAScript 和 DOM 的程度。
1.4 小结
JavaScript 是一门用来与网页交互的脚本语言,包含以下三个组成部分。
- ECMAScript:由 ECMA-262 定义并提供核心功能。
- 文档对象模型(DOM):提供与网页内容交互的方法和接口。
- 浏览器对象模型(BOM):提供与浏览器交互的方法和接口。
JavaScript 的这三个部分得到了五大 Web 浏览器(IE、Firefox、Chrome、Safari 和 Opera)不同程度 的支持。所有浏览器基本上对 ES5(ECMAScript 5)提供了完善的支持,而对 ES6(ECMAScript 6)和 ES7(ECMAScript 7)的支持度也在不断提升。这些浏览器对 DOM 的支持各不相同。HTML5 中收录的 BOM 会因浏览器而异,不过开发者仍然可以假定存在很大一部分公共特性。