尽管ECMAScript是一个重要的标准,但它并不是JavaScript唯一的部分,也不是唯一被标准化的部分。实际上,一个完整的JavaScript实现是由以下3 个不同部分组成的:
●核心(ECMAScript):JavaScrip的核心ECMAScript描述了该语言的语法和基本对象。
●文档对象模型(DOM):DOM描述了访问网页元素的方法和接口。
●浏览器对象模型(BOM):BOM描述了与浏览器进行交互的方法和接口。
一个完整的JavaScript实现如图 1.1 所示。
图1.1 JavaScript的组成
ECMAScript是JavaScript语言的核心。究竟什么才是ECMAScript呢?ECMA-262标准的描述如下:“ECMAScript可以为不同种类的宿主环境提供核心的脚本编程能力,因此核心的脚本语言是与任何特定的宿主环境分开进行规定的……”。
也就是说,ECMAScript并不与任何具体浏览器相绑定。Web浏览器对于ECMAScript来说是一个宿主环境(JavaScipt最终要在浏览器中运行),但它并不是唯一的宿主环境。事实上,还有不计其数的其他各种环境(例如Macromedia同时用在Flash和Director MX中的ActionScript)可以容纳ECMAScript实现。那么ECMAScript在浏览器之外规定了些什么呢?
简单地说,ECMAScript描述了以下内容:
●语法
●类型
●语句
●关键字
●保留字
●运算符
●对象
ECMAScript仅仅是一个描述,定义了脚本语言的所有属性、方法和对象。其他语言可以实现ECMAScript来作为功能的基准,如图 1.2 所示。
图1.2 ECMAScript是JavaScript的核心
每个浏览器都有它自己的ECMAScript接口的实现,然后这个实现又被扩展,包含了DOM和BOM。当然还有其他实现并扩展了ECMAScript的语言,例如Windows脚本宿主(Windows Scripting Host, WSH)、Adobe在Flash和Director MX中实现的ActionScript。
如今,所有主流的Web浏览器都遵守ECMA-262 第三版标准。
DOM(文档对象模型)是HTML和XML的应用程序接口(API)。DOM将把整个页面规划成由节点层级构成的文档。HTML或XML页面的每个部分都是一个节点的衍生物。请参考下面的HTML页面:
这段代码可以用DOM绘制成一个节点层次图,如图 1.3 所示。
图1.3 DOM节点树
DOM通过创建树来表示文档,从而使开发者对文档的内容和结构具有强大的控制力。用DOM API可以轻松地删除、添加和替换节点。
自从IE 4.0 和Netscape Navigator 4.0 开始支持不同形态的动态HTML(DHTML),开发者首次能够在不重载网页的情况下修改它的外观和内容。这是Web技术的一大飞跃,不过也带来了巨大的问题。Netscape和微软各自开DHTML,从而导致了Web开发者不能再只编写一个HTML页面就可以在所有浏览器中访问。
如果放任Netscape和微软公司这样做,Web必将分化为两个独立的部分,每一部分只适用于特定的浏览器。业界决定必须要做点什么以保持Web的跨平台特性,因此,负责制定Web通信标准的团体W3C(World Wide Web Consortium)就开始制定DOM。
目前绝大部分主流浏览器都对DOM提供了良好的支持。
从IE 3.0 和Netscape Navigator 3.0 开始,浏览器提供了一种特性——BOM(浏览器对象模型),可以对浏览器窗口进行访问和操作。使用BOM,开发者可以移动窗口、改变状态栏中的文本以及执行其他与页面内容不直接相关的动作。BOM独树一帜且又常常令人疑惑的地方在于,它只是JavaScript的一个部分,没有任何相关的标准。
BOM主要处理浏览器窗口和框架,不过通常浏览器特定的JavaScript扩展都被看作BOM的一部分。这些扩展包括:
●弹出新的浏览器窗口
●移动、关闭浏览器窗口以及调整窗口大小
●提供Web浏览器详细信息的定位对象
●提供用户屏幕分辨率详细信息的屏幕对象
●对cookie的支持
IE扩展了BOM,加入了ActiveXObject类,可以通过JavaScript实例化ActiveX对象。
由于没有相关的BOM标准,每种浏览器都有自己的BOM实现。有一些事实上的标准,如具有一个窗口对象和一个导航对象,不过每种浏览器都可以为这些对象或其他对象定义自己的属性和方法。
绝大部分主流浏览器支持以下BOM对象:
● window对象:用于代表浏览器窗口和框架。
● navigator对象:包含有关客户机浏览器的信息。
● screen对象:包含有关客户机显示屏幕的信息。
● history对象:表示窗口的浏览历史,由一系列的URL组成。这些URL是用户在一个浏览器窗口内已访问的URL。
● location对象:包含有关当前URL的信息。