第1章 JavaScript简介

 1.2 JavaScript实现

虽然JavaScript和ECMAScript通常都被人们用来表达相同的含义,但JavaScript的含义却比ECMA-262中规定的要多得多。没错,一个完整的JavaScript实现应该由下列三个不同的部分组成。

  • 核心(ECMAScript)
  • 文档对象模型(DOM)
  • 浏览器对象模型(BOM)

 

1.2.1 ECMAScript

由ECMA-262定义的ECMAScript与Web浏览器没有依赖关系。实际上,这门语言本身并不包含输入和输出定义。ECMA-262定义的只是这门语言的基础,而在此基础之上可以构建更完善的脚本语言。我们常见的Web浏览器只是ECMAScript实现可能的宿主环境之一。宿主环境不仅提供了基本的ECMAScript实现,同时也会提供该语言的扩展,以便语言与环境之间对接交互。而这些扩展--如DOM,则利用ECMAScript的核心类型和语法提供更多更具体的功能,以便实现针对环境的操作。前面介绍过的ScriptEase以及众所周知的Adobe Flash也都是宿主环境。
既然ECMA-262标准没有参照Web浏览器,那它都规定了些什么内容呢?大致说来,它规定了这门语言的下列组成部分:
  • 语法
  • 类型
  • 语句
  • 关键字
  • 保留字
  • 操作符
  • 对象
ECMAScript就是对实现该标准规定的各个方面内容的语言的描述。JavaScript实现了ECMAScript,Adobe ActionScript和OpenView ScriptEase同样也实现了ECMAScript。
1.ECMAScript的版本
ECMAScript的不同版本又称为版次,以第x版表示(意即描述特定实现的ECMA-262规范的第x个版本)。ECMA-262的最近一版是第4版,发布于2007年。
ECMA-262第3版才是对该标准第一次真正的修改。修改的内容涉及字符串处理、错误定义和数值输出。这一版还新增了对正则表达式、新控制语句、try-catch异常处理的支持,并围绕标准的国际化做出了一些小的修改。从各方面综合来看,第3版标志着ECMAScript成为了一门真正的编程语言。
ECMA-262第4版对这门语言进行了一次全面的检核修订。由于JavaScript在Web上日益流行,开发人员纷纷建议修订ECMAScript,以使其能够满足不断增长的Web开发需求。作为回应,ECMA TC39重新召集相关人员共同谋划这门语言的未来。结果,出台后的标准几乎在第3版基础上完全定义了一门新语言。第4版不仅包含了强类型变量、新语句和新数据结构、真正的类和经典继承,还定义了数据交互的新方式。
与此同时,TC39下属的一个小组也提出了一个名为ECMAScript 3.1 的替代性建议,该建议只对这门语言进行了较少的改进。这个小组认为第4版给这门语言带来的跨越性太大了。因此,该小组建议对这门语言进行小幅修订。
3.Web浏览器对ECMAScript的支持
到了2008年,五大主流Web浏览器(IE、Firefox、Safari、Chrome和Opera)全部做到了与ECMA-262兼容。其中,只有Firefox力求做到与该标准的第4版兼容。而IE8则率先着手实现尚未完成的ECMAScript3.1 。下表列出了 ECMAScript 受主流 Web 浏览器支持的情况:

1.2.2 文档对象模型(DOM)

文档对象模型(DOM,Document Object Model)是针对XML但经过扩展用于HTML的应用程序编程接口(API,Application Programming Interface)。DOM把整个页面映射为一个多层节点结构。HTML或XML页面中的每个组成部分都是某种类型的节点,这些节点又包含着不同类型的数据。看下面这个 HTML 页面:
通过 DOM 创建的这个表示文档的树形图,开发人员获得了控制页面内容和结构的主动权。借助 DOM 提供的 API ,开发人员可以轻松自如地删除、添加、替换或修改任何节点。
1.为什么要使用DOM

在 Internet Explorer 4 和 Netscape Navigator 4 分别支持的不同形式的DHTML (Dynamic HTML) 基础上,开发人员首次无需重新加载网页,就可以修改其外观和内容了。然而,DHTML在给Web技术发展带来巨大进步的同时,也带来了巨大的问题。由于 Netscape 和微软在开发 DHTML 方面各持己见,过去那个只编写一个 HTML 页面就能够在任何浏览器中运行的时代结束了。
对开发人员而言,如果想继续保持Web跨平台的天性,就必须额外多做一些工作。而人们真正担心的是,如果不对 Netscape 和微软加以控制,Web开发领域就会出现技术上两强割据,浏览器互不兼容的局面。此时,负责制定Web通信标准的 W3C (World Wide Web Consortium , 万维网联盟) 开始着手规划 DOM 。

2.DOM级别

DOM 1级 (DOM Level 1) 于1998年10月成为 W3C 的推荐标准。DOM 1级由两个模块组成: DOM 核心 (DOM Core) 和 DOM HTML 。其中, DOM核心规定的是如何映射基于XML的文档结构,以便简化对文档中任意部分的访问和操作。 DOM HTML 模块则在 DOM 核心的基础上加以扩展,添加了针对 HTML 的对象和方法。
请读者注意, DOM 并不只是针对 JavaScript 的,很多别的语言也都实现了 DOM 。不过在 Web 浏览器中,基于 ECMAScript 实现的 DOM 的确已经成为 JavaScript 这门语言的一个重要组成部分。

如果说 DOM 1级的目的主要是映射文档的结构,那么 DOM 2级的目标就要宽泛多了。 DOM 2级在原来 DOM 的基础上又扩充了 (DHTML 一直都支持的) 鼠标和用户界面事件、范围、遍历 (迭代 DOM 文档的方法) 等细分模块,而且通过对象接口增加了对 CSS (Cascading Style Sheet,层叠样式表) 的支持。DOM 1级中的 DOM 核心模块也经过扩展开始支持 XML 命名空间。
DOM 2级引入了下列新模块,也给出了众多新类型和新接口的定义:
  • DOM 视图 (DOM Views) -- 定义了跟踪不同文档 (例如,应用CSS之前和之后的文档) 视图的接口;
  • DOM 事件 (DOM Events) -- 定义了事件和事件处理的接口;
  • DOM 样式 (DOM Style) -- 定义了基于CSS为元素应用样式的接口;
  • DOM 遍历和范围 (DOM Traversal and Range) -- 定义了遍历和操作文档树的接口。

DOM 3级则进一步扩展了 DOM ,引入了以统一方式加载和保存文档的方法 -- 在 DOM 加载和保存 (DOM Load and Save) 模块中定义;新增了验证文档的方法 -- 在DOM验证 (DOM Validation) 模块中定义。DOM 3级也对 DOM 核心进行了扩展, 开始支持 XML 1.0规范,涉及 XML Infoset 、XPath 和 XML Base 。
在阅读 DOM 标准的时候,读者可能会看到 DOM 0级 (DOM Level 0) 的字眼。实际上,DOM 0级标准是不存在的;所谓 DOM 0级只是 DOM历史坐标中的一个参照点而已。具体说来,DOM 0级指的是 Internet Explorer 4.0 和 Netscape Navigator 4.0 最初支持的 DHTML 。

4.Web浏览器对DOM的支持

在DOM标准出现了一段时间之后,Web浏览器才开始实现它。微软在 IE 5 中首次尝试实现 DOM ,但直到 IE 5.5 才算是真正支持 DOM 1级。在随后的 IE 6 和 IE 7 中,微软都没有引入新的 DOM 功能,而到了 IE 8 才对以前 DOM 实现中的 bug 进行了修复。
Netscape 直到 Netscape 6 (Mozilla 0.6.0) 才开始支持 DOM。在 Netscape 7之后,Mozilla 把开发重心转向了 Firefox 浏览器。Firefox 3完全支持 DOM 1级,几乎完全支持 DOM 2级,甚至还支持 DOM 3级的一部分。
目前,支持 DOM 已经成为浏览器开发商的首要目标,主流浏览器每次发布新版本都会改进对 DOM 的支持。在支持 DOM 方面,IE 已经被另外三个主要浏览器远远地落在了后面 -- IE 仍处于仅部分实现了 DOM 1级的状态。而 Chrome 0.2+、Opera 9 和 Safari 3不仅完全支持 DOM 1级,还支持 DOM 2级的大部分。下表列出了主流浏览器对 DOM 标准的支持情况:

1.2.3 浏览器对象模型 (BOM)

Internet Explorer3和Netscape Navigator3有一个共同的特色,那就是支持可以访问和操作浏览器窗口的浏览器对象模型(BOM,Browser Object Model)。开发人员使用BOM可以控制浏览器显示的页面以外的部分。而BOM真正与众不同的地方(也是经常会导致问题的地方),还是它作为JavaScript实现的一部分,至今仍没有相关的标准。
从根本上讲,BOM只处理浏览器窗口和框架;但人们习惯上也把所有针对浏览器的JavaScript扩展算作BOM的一部分。下面就是一些这样的扩展:
  • 弹出新浏览器窗口的功能;
  • 移动、缩放和关闭浏览器窗口的功能;
  • 提供浏览器详细信息的navigator对象;
  • 提供浏览器所加载页面的详细信息的location对象;
  • 提供用户显示器分辨率详细信息的对象screen对象;
  • 对cookies的支持;
  • 像XMLHttpRequest和IE的ActiveXObject这样的自定义对象。
由于没有BOM标准可以遵循,因此每个浏览器都有自己的实现。虽然也存在一些事实标准,例如要有window对象和navigator对象等,但每个浏览器都会为这两个对象乃至其他对象定义自己的属性和方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值