JavaScript 简史
1.1 JavaScript简史
在web日益流行的今天,人们对客户端脚本语言的需求也越来越高。
1995.2 就职于网景公司的Brendan Eich发布了其开发的LiveScript,改语言同时在浏览器和服务器使用。为了赶工期,在Netscape Navigator 2发布前夕,Netscape为了搭上媒体热炒Java的顺风车,临时把LiveScript改成了JavaScript.
发布大获成功,之后,微软就在其Internet Explore 3.0中加入名为JScript的JavaScript实现。
当时缺少标准的状况下,导致了个厂商对于实现javascript特性的差异性,并影响了web发展的道路曲折了十几年,事实证明对于世界性开发语言最终还是要有统一的标准,闭门造车是要付出沉痛代价——时间成本。
1997年,以javascript 1.1 为蓝本的建议被提交给了欧洲计算机制造商会(European Computer Manufactures Association, 简称 ECMA),经过几个月的努力完成了 ECMA-262——定义了一种名为ECMAScript的新的脚本标准。
1.2 JavaScript 实现
一个完整的JavaScript事先应该有下列三个部分组成:
- 核心 [ECMAScript]
- 文档对象模型 [DOM]
- 浏览器对象模型[BOM]
1.2.1 ECMAScript
由 ECMAScript-262定义的ECMAScript与web浏览器没有依赖关系。并没有包含输入和输出定义。它只定义了语言基础,我们常见的web浏览器只是ECMAScript实现可能的宿主环境之一。其他宿主环境包括 Node 和 Adobe Flash。它规定了以下内容:
- 语法
- 类型
- 语句
- 关键字
- 保留字
- 操作符
- 对象
1.2.2 文档对象模型(DOM)
文档对象模型(DOM)是针对XML,但经过扩展用于HTML的应用程序编程接口。DOM把整个页面映射为一个多层节点结构。HTML或XML页面中的每个组成部分都是某种类型的节点。
<html>
<head>
<title>gruguy example</title>
</head>
<body>
<p>Hello World</p>
</body>
</html>
1. 为什么要使用DOM
微软和网景支持不同的形式的DHTML,过去只编写一个HTML页面就能够在任何浏览器中运行的时代结束了。 此时,负责制定web通信标准W3C(world wide website Consortium 万维网联盟)开始着手规划DOM
2. DOM级别
DOM1级(DOM level1)于1998.10成为了W3c的推荐标准。DOM1有两个模块组成,DOM核心(Core)和 DOM HTML。DOM核心规定了如何映射基于XML的文档结构,以简化对文档中任意部分访问和操作。DOM HTML模块规定在核心基础上加以扩展,添加了针对HTML的对象和方法。
DOM2级引入了新的模块,定义了新的接口方法
- DOM视图(DOM View): 定义了跟踪不同文档视图的接口;
- DOM时间(DOM Events):定义了事件和事件处理的接口;
- DOM样式(DOM Style):定义了基于CSS为元素应用样式的接口;
- DOM遍历和范围(DOM traversal and range):定义了遍历和操作文档树的接口。
DOM3级则进一步扩展了DOM,引入了以统一方式加载和保存文档的方法——在DOM加载和保存(DOM Load and Save)模块中定义,新增文档验证的方法——DOM验证(DOM Validation)模块中定义。DOM3级也对DOM核心扩展,开始支持XML1.0规范,设计XML Infoset、XPath和XMLBase。
3. 其他DOM标准
略
4. Web浏览器对DOM的支持
标准制定后,过了一段时间,web浏览器才开始支持。微软首先在IE5中实现了DOM,但直到IE5.5才算是真正支持了DOM1级。Netscape后来重心放在了firefox上,firefox 3完全支持DOM1,几乎完全支持DOM2,还有一部分DOM3,目前,主流的浏览器都支持了DOM标准。
1.2.3 浏览器对象模型
BOM始于web浏览器的实现,对于操作浏览器对象模型,但是没有标准,直到HTML5,将很多BOM功能写进正式规范。
- 弹出新浏览器窗口的功能
- 移动、缩放和关闭浏览器窗口功能
- 提供浏览器详细信息的navigator对象
- 提供浏览器所加载页面的详细信息的location对象
- 提供用户显示器分辨率详细信息screen对象
- 提供cookies的支持
- 像 XMLHTTPRequest 和IE的 ActiveXObject 这样的自定义对象