您的位置:首页 > Web前端 > JavaScript

javascript_实现

2007-08-01 16:49 309 查看
尽管ECMAScript是一个重要的标准,但它并不是JavaScript唯一的部分,当然,也不是唯一被标准化的部分。实际上,一个完整的JavaScript实现是由以下3个不同部分组成的(见图1-1):
q 核心(ECMAScript);
q 文档对象模型(DOM);
q 浏览器对象模型(BOM)。



[align=center]图 1-1[/align]
1.2.1 ECMAScript
ECMAScript并不与任何具体浏览器相绑定,实际上,它也没有提到用于任何用户输入输出的方法(这点与C这类语言不同,它需要依赖外部的库来完成这类任务)。那么什么才是ECMAScript呢?ECMA-262标准(第2段)的描述如下:
“ECMAScript可以为不同种类的宿主环境提供核心的脚本编程能力,因此核心的脚本语言是与任何特定的宿主环境分开进行规定的……”
Web浏览器对于ECMAScript来说是一个宿主环境,但它并不是唯一的宿主环境。事实上,还有不计其数的其他各种环境(例如Nombas的ScriptEase和Macromedia同时用在Flash与Director MX中的ActionScript)可以容纳ECMAScript实现。那么ECMAScript在浏览器之外规定了些什么呢?简单地说,ECMAScript描述了以下内容:
q 语法;
q 类型;
q 语句;
q 关键字;
q 保留字;
q 运算符;
q 对象。


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



[align=center]图 1-2[/align]
每个浏览器都有它自己的ECMAScript接口的实现,然后这个实现又被扩展,包含了DOM和BOM(在以下几节中再讨论)。当然还有其他实现并扩展了ECMAScript的语言,例如Windows脚本宿主(Windows Scripting Host,WSH)、Macromedia的Flash与Director MX中的ActionScript,以及Nombas ScriptEase。
1.ECMAScript的版本
ECMAScript分成几个不同的版本,它是在一个叫做ECMA-262的标准中定义的。和其他标准一样,ECMA-262会被编辑和更新。当有了主要更新时,就会发布一个标准的新版。最新ECMA-262的版本是第三版,于1999年12月发布。ECMA-262的第一个版在根本上是和Netscape的JavaScript 1.1一样的,只是把所有与浏览器相关的代码删除了,不过有一些小的调整。首先,ECMA-262要求对Unicode标准的支持(以便支持多语言)。第二,它要求对象是平台无关的(Netscape的JavaScript 1.1事实上有不同的对象实现,例如Date对象,是依赖于平台的)。这也是JavaScript 1.1和1.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实现必须符合以上标准。
3.Web浏览器中的ECMAScript支持
含有JavaScript 1.1的Netscape Navigator 3.0在1996年发布。然后,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.2的Netscape Navigator 4.0是在1997年,在那年晚些时候,ECMA-262标准被接受并标准化。因此,JavaScript 1.2并不和ECMAScript的第一版兼容,虽然ECMAScript应该基于JavaScript 1.1。
JScript的下一步升级是IE 4.0中加入的JScript 3.0(2.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支持:

[align=left] 浏 览 器[/align]
[align=center]ECMAScript符合性[/align]
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
1.2.2 DOM
DOM(文档对象模型)是HTML和XML的应用程序接口(API)。DOM将把整个页面规划成由节点层级构成的文档。HTML或XML页面的每个部分都是一个节点的衍生物。请考虑下面的HTML页面:





这段代码可以用DOM绘制成一个节点层次图(如图1-3所示)。




图 1-3
DOM通过创建树来表示文档,从而使开发者对文档的内容和结构具有空前的控制力。用DOM API可以轻松地删除、添加和替换节点。
1.为什么DOM必不可少
自从IE 4.0和Netscape Navigator 4.0开始支持不同形式的动态HTML(DHTML),开发者首次能够在不重载网页的情况下修改它的外观和内容。这是Web技术的一大飞跃,不过也带来了巨大的问题。Netscape和微软各自开发自己的DHTML,从而结束了Web开发者只编写一个HTML页面就可以在所有浏览器中访问的时期。
业界决定必须要做点什么以保持Web的跨平台特性,他们担心如果放任Netscape和微软公司这样做,Web必将分化为两个独立的部分,每一部分只适用于特定的浏览器。因此,负责制定Web通信标准的团体W3C(World Wide Web Consortium)就开始制定DOM。
2.DOM的各个Level
DOM Level 1是W3C于1998年10月提出的。它由两个模块构成,即DOM Core和DOM 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 Infoset、XPath和XML Base.
在学习DOM时,可能会遇到有人引用DOM Level 0。注意,根本没有DOM Level 0这个标准,它只是DOM的一个历史参考点(DOM Level 0指的是IE 4.0和Netscape Navigator 4.0中支持的原始DHTML)。
3.其他DOM
除了DOM Core和DOM HTML外,还有其他几种语言发布了自己的DOM标准。这些语言都是基于XML的,每种DOM都给对应语言添加了特有的方法和接口:
q 可缩放矢量图形(SVG)1.0;
q 数学标记语言(MathML)1.0;
q 同步多媒体集成语言(SMIL)。
此外,其他语言也开发了自己的DOM实现,如Mozilla的XML用户界面语言(XUL)。不过,只有上面列出的几种语言是W3C的推荐标准。
4.Web浏览器中的DOM支持
DOM在被Web浏览器开始实现之前就已经是一种标准了。IE首次尝试支持DOM是在5.0版本中,不过其实直到5.5版本才具有真正的DOM支持,IE 5.5实现了DOM Level 1。从那时起,IE就没有再引入新的DOM功能。
Netscape直到Netscape 6(Mozilla 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的支持。
[align=center][/align]

[align=center]浏 览 器[/align]
[align=left] DOM兼容性[/align]
Netscape Navigator 1.0-4.x
-
Netscape 6.0+ (Mozilla 0.6.0+)
Level 1、Level 2、Level 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
1.2.3 BOM
IE 3.0和Netscape 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章详细介绍了这些实现的不同之处。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: