了解 JavaScript

尽管ECMAScript是一个重要的标准,但它并不是JavaScript唯一的部分,当然,也不是唯一被标准化的部分。实际上,一个完整的JavaScript实现是由以下3个不同部分组成的:q  核心(ECMAScript);

q  文档对象模型(DOM);

q  浏览器对象模型(BOM)。

一、 ECMAScript

ECMAScript并不与任何具体浏览器相绑定,实际上,它也没有提到用于任何用户输入输出的方法(这点与C这类语言不同,它需要依赖外部的库来完成这类任务)。那么什么才是ECMAScript呢?ECMA-262标准(第2段)的描述如下:

ECMAScript可以为不同种类的宿主环境提供核心的脚本编程能力,因此核心的脚本语言是与任何特定的宿主环境分开进行规定的……”

Web浏览器对于ECMAScript来说是一个宿主环境,但它并不是唯一的宿主环境。事实上,还有不计其数的其他各种环境(例如NombasScriptEaseMacromedia同时用在FlashDirector MX中的ActionScript)可以容纳ECMAScript实现。那么ECMAScript在浏览器之外规定了些什么呢?简单地说,ECMAScript描述了以下内容:

q  语法;

q  类型;

q  语句;

q  关键字;

q  保留字;

q  运算符;

q  对象。

ECMAScript仅仅是一个描述,定义了脚本语言的所有属性、方法和对象。其他的语言可以实现ECMAScript来作为功能的基准,JavaScript就是这样。

每个浏览器都有它自己的ECMAScript接口的实现,然后这个实现又被扩展,包含了DOMBOM(在以下几节中再讨论)。当然还有其他实现并扩展了ECMAScript的语言,例如Windows脚本宿主(Windows Scripting HostWSH)、MacromediaFlashDirector MX中的ActionScript,以及Nombas ScriptEase

1ECMAScript的版本

ECMAScript分成几个不同的版本,它是在一个叫做ECMA-262的标准中定义的。和其他标准一样,ECMA-262会被编辑和更新。当有了主要更新时,就会发布一个标准的新版。最新ECMA-262的版本是第三版,于199912月发布。ECMA-262的第一个版在根本上是和NetscapeJavaScript 1.1一样的,只是把所有与浏览器相关的代码删除了,不过有一些小的调整。首先,ECMA-262要求对Unicode标准的支持(以便支持多语言)。第二,它要求对象是平台无关的(NetscapeJavaScript 1.1事实上有不同的对象实现,例如Date对象,是依赖于平台的)。这也是JavaScript 1.11.2为什么不符合ECMA-262规范第一版的主要原因。

ECMA-262的第二版大部分更新本质上是编辑性的。这次标准的更新是为了与ISO/IEC- 16262的严格一致,也并没有特别添加、更改和删除内容。ECMAScript实现一般不会遵守第二版。

EMCA-262第三版是该标准第一次真正的更新。它提供了对字符串处理、错误定义和数值输出的更新。同时,它还增加了正则表达式、新的控制语句、try...catch异常处理的支持,以及一些为使标准国际化而做的小改动。一般来说,它标志着ECMAScript成为一种真正的编程语言的到来。

2.何谓ECMAScript符合性

ECMA-262中,ECMAScript符合性(conformance)有明确的定义。一个脚本语言必须满足以下四项基本原则:

q  符合的实现必须按照ECMA-262中所描述的支持所有的“类型、值、对象、属性、函数和程序语法及语义”(ECMA-262,第1页);

q  符合的实现必须支持Unicode字符标准(UCS);

q  符合的实现可以增加没有在ECMA-262中指定的“额外的类型、值、对象、属性和函数”。ECMA-262将这些增加描述为规范中未给定的新对象或对象的新属性;

q  符合的实现可以支持没有在ECMA-262中定义的“程序和正则表达式语法”(意思是可以替换或者扩展内建的正则表达式支持)。

所有的ECMAScript实现必须符合以上标准。

3Web浏览器中的ECMAScript支持

含有JavaScript 1.1Netscape Navigator 3.01996年发布。然后,JavaScript 1.1规范被作为一个新标准的草案提交给ECMA。有了JavaScript轰动性的流行,Netscape十分高兴地开始开发1.2版。但有一个问题:ECMA并未接受Netscape的草案。在Netscape Navigator 3.0发布后不久,微软就发布了IE 3.0。该版本的IE含有JScript 1.0(微软自己的JavaScript实现的名称),原本计划可以与JavaScript 1.1相提并论。然而,由于文档不全以及一些不当的重复特性,JScript 1.0 远远没有达到JavaScript 1.1的水平。

ECMA-262第一版定稿之前,发布含有JavaScript 1.2Netscape Navigator 4.0是在1997年,在那年晚些时候,ECMA-262标准被接受并标准化。因此,JavaScript 1.2并不和ECMAScript的第一版兼容,虽然ECMAScript应该基于JavaScript 1.1

JScript的下一步升级是IE 4.0中加入的JScript 3.02.0版是随微软的IIS 3.0一起发布的,但并未包含在浏览器中)微软大力宣传JScript 3.0是世界上第一个真正符合ECMA标准的脚本语言。而那时,ECMA-262还并没有最终定稿,所以JScript 3.0也遭受了和JavaScript 1.2同样的命运——它还是没能符合最终的ECMAScript标准。

Netscape选择在Netscape Navigator 4.06中升级它的JavaScript实现。JavaScript 1.3使Netscape终于完全符合了ECMAScript第一版。Netscape加入了对Unicode标准的支持,并让所有的对象保留了在JavaScript 1.2中引入的新特性的同时实现了平台独立。

Netscape将它的源代码作为Mozilla项目公布于众时,本来计划JavaScript 1.4将会嵌入到Netscape Navigator 5.0中。然而,一个冒进的决定——要完全从头重新设计Netscape的代码,破坏了这个工作。JavaScript 1.4仅仅作为一个Netscape Enterprise Server的服务器端脚本语言发布,以后也没有被放入浏览器中。

如今,所有的主流Web浏览器都遵守ECMA-262第三版。下面的表格列出了大部分流行Web浏览器中的ECMAScript支持:

               

ECMAScript符合性

Netscape Navigator 2.0

Netscape Navigator 3.0

Netscape Navigator 4.0–4.05

Netscape Navigator 4.06–4.79

Edition 1

Netscape 6.0+ (Mozilla 0.6.0+)

Edition 3

Internet Explorer 3.0

Internet Explorer 4.0

Internet Explorer 5.0

Edition 1

Internet Explorer 5.5+ 

Edition 3

Opera 6.0–7.1 

Edition 2

Opera 7.2+ 

Edition 3

Safari 1.0+/Konqueror ~2.0+ 

Edition 3

二、 DOM

DOM(文档对象模型)是HTMLXML的应用程序接口(API)。DOM将把整个页面规划成由节点层级构成的文档。HTMLXML页面的每个部分都是一个节点的衍生物。请考虑下面的HTML页面:

这段代码可以用DOM绘制成一个节点层次图。

DOM通过创建树来表示文档,从而使开发者对文档的内容和结构具有空前的控制力。用DOM API可以轻松地删除、添加和替换节点。

1.为什么DOM必不可少

自从IE 4.0Netscape Navigator 4.0开始支持不同形式的动态HTMLDHTML),开发者首次能够在不重载网页的情况下修改它的外观和内容。这是Web技术的一大飞跃,不过也带来了巨大的问题。Netscape和微软各自开发自己的DHTML,从而结束了Web开发者只编写一个HTML页面就可以在所有浏览器中访问的时期。

业界决定必须要做点什么以保持Web的跨平台特性,他们担心如果放任Netscape和微软公司这样做,Web必将分化为两个独立的部分,每一部分只适用于特定的浏览器。因此,负责制定Web通信标准的团体W3CWorld Wide Web Consortium)就开始制定DOM

2DOM的各个Level

DOM Level 1W3C199810月提出的。它由两个模块构成,即DOM CoreDOM HTML。前者提供了基于XML的文档的结构图,以方便访问和操作文档的任意部分;后者添加了一些HTML专用的对象和方法,从而扩展了DOM Core

注意,DOM不是JavaScript专有的,事实上许多其他语言都实现了它。不过,Web浏览器中的DOM已经用ECMAScript实现了,现在是JavaScript语言的一个很大组成部分。

DOM Level 1只有一个目标,即规划文档的结构,DOM Level 2的目标就广泛多了。对原始DOM的扩展添加了对鼠标和用户界面事件(DHTML对此有丰富的支持)、范围、遍历(重复执行DOM文档的方法)的支持,并通过对象接口添加了对CSS(层叠样式表)的支持。由Level 1引入的原始DOM Core也加入了对XML命名空间的支持。

DOM Level 2引入几种DOM新模块,用于处理新的接口类型:

q  DOM视图——描述跟踪文档的各种视图(即CSS样式化之前和CSS样式化之后的文档)的接口;

q  DOM事件——描述事件的接口;

q  DOM样式——描述处理基于CSS样式的接口;

q  DOM遍历和范围——描述遍历和操作文档树的接口。

DOM Level 3引入了以统一的方式载入和保存文档的方法(包含在新模块DOM Load and Save中)以及验证文档(DOM Validation)的方法,从而进一步扩展了DOM。在Level 3中,DOM Core被扩展为支持所有的XML 1.0特性,包括XML InfosetXPathXML Base

在学习DOM时,可能会遇到有人引用DOM Level 0。注意,根本没有DOM Level 0这个标准,它只是DOM的一个历史参考点(DOM Level 0指的是IE 4.0Netscape Navigator 4.0中支持的原始DHTML)。

3.其他DOM

除了DOM CoreDOM HTML外,还有其他几种语言发布了自己的DOM标准。这些语言都是基于XML的,每种DOM都给对应语言添加了特有的方法和接口:

q  可缩放矢量图形(SVG1.0

q  数学标记语言(MathML1.0

q  同步多媒体集成语言(SMIL)。

此外,其他语言也开发了自己的DOM实现,如MozillaXML用户界面语言(XUL)。不过,只有上面列出的几种语言是W3C的推荐标准。

4Web浏览器中的DOM支持

DOM在被Web浏览器开始实现之前就已经是一种标准了。IE首次尝试支持DOM是在5.0版本中,不过其实直到5.5版本才具有真正的DOM支持,IE 5.5实现了DOM Level 1。从那时起,IE就没有再引入新的DOM功能。

Netscape直到Netscape 6Mozilla 0.6.0)才引入DOM支持。目前,Mozilla具有最好的DOM支持,实现了完整的Level 1、几乎所有的Level 2以及一部分Level 3。(Mozilla开发小组的目标是构造一个与标准100%兼容的浏览器,他们的工作得到了回报。)

Opera直到7.0版本才加入DOM支持,还有Safari也实现了大部分DOM Level 1。它们几乎都与IE 5.5处于同一水平,有些情况下,甚至超过了IE 5.5。不过,就对DOM的支持而论,所有浏览器都远远落后于Mozilla。下表列出了常用浏览器对DOM的支持。 

    

             DOM兼容性

Netscape Navigator 1.0-4.x

-

Netscape 6.0+ (Mozilla 0.6.0+)

Level 1Level 2Level 3(部分)

IE 2.0-4.x

-

IE 5.0

Level 1(最小)

IE 5.5+

Level 1(几乎全部)

Opera 1.0-6.0

-

Opera 7.0+

Level 1(几乎全部)、Level 2(部分)

Safari 1.0+/Konqueror ~2.0+

Level 1

三、 BOM

IE 3.0Netscape Navigator 3.0提供了一种特性——BOM(浏览器对象模型),可以对浏览器窗口进行访问和操作。使用BOM,开发者可以移动窗口、改变状态栏中的文本以及执行其他与页面内容不直接相关的动作。使BOM独树一帜且又常常令人怀疑的地方在于,它只是JavaScript实现的一部分,没有任何相关的标准。

BOM主要处理浏览器窗口和框架,不过通常浏览器特定的JavaScript扩展都被看作BOM的一部分。这些扩展包括:

q  弹出新的浏览器窗口;

q  移动、关闭浏览器窗口以及调整窗口大小;

q  提供Web浏览器详细信息的导航对象;

q  提供装载到浏览器中页面的详细信息的定位对象;

q  提供用户屏幕分辨率详细信息的屏幕对象;

q  cookie的支持;

q  IE扩展了BOM,加入了ActiveXObject类,可以通过JavaScript实例化ActiveX对象。

由于没有相关的BOM标准,每种浏览器都有自己的BOM实现。有一些事实上的标准,如具有一个窗口对象和一个导航对象,不过每种浏览器可以为这些对象或其他对象定义自己的属性和方法。本书第5章详细介绍了这些实现的不同之处。

posted on 2007-12-03 15:48  迷你软件  阅读(261)  评论(0编辑  收藏  举报

本网站绝大部分资源来源于Internet,本站所有作品版权归原创作者所有!!如有以下内容:章节错误、非法内容、作者署名出错、版权疑问、作品内容有违相关法律等请及时与我联系. 我将在第一时间做出响应!本站所有文章观点不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。