javascript与ECMAScript、DOM、BOM的关系
在初学javascript时,经常会看见javascript dom、ECMAScript等名词,一直不明白,今天查阅了一些资料和评论,简单写一下。
- JavaScript 的核心 ECMAScript 描述了该语言的语法和基本对象;
- DOM 描述了处理网页内容的方法和接口;
- BOM 描述了与浏览器进行交互的方法和接口。
ECMAScript
先简单了解javascript的发展历史,在因特网发展的初期,为了减少客户端与服务器的交互(比如表单的验证一类),提高网上冲浪的效率,当时著名的Netscape公司开发了一种名为livescript的脚本语言,当时的目的是在浏览器和服务器(本来要叫它 LiveWire)端使用它。后来即将推出2.0版本的时候,为了顺应java的时髦名声,Netscape公司就其更名为javascript(所以javascript和java的区别相当于雷锋和雷峰塔),从此javascript就成为因特网的必备组件。当时微软并不甘心,克隆了javascript的一个版本,为了避免版权的问题,微软就把它命名为Jscript,同时,当时也存在另外的一个版本,CEnvi 的 ScriptEase。
然而这样的局面显然是不利于浏览器发展的,所以业界不断呼吁制定脚本语言的标准,最后在各方的努力下,这事也成了,由ECMA(欧洲计算机制造商协会)来制定相应的规范,这样就出现了ECMAScript。但是需要注意的是,ECMAScript只是制定了标准,定义了脚本语言的所有属性、方法和对象,并没有涉及脚本语言的具体实现。其他脚本语言(像javascript和Jscript)以 ECMAScript 作为基准来实现功能和扩展,进而发展出了dom和bom。
现在我们常用的浏览器脚本语言是javascript,而javascript由ECMAscript、dom和bom组成。
DOM
DOM(文档对象模型)是 HTML 和 XML 的应用程序接口(API)。DOM 将把整个页面规划成由节点层级构成的文档。HTML 或 XML 页面的每个部分都是一个节点的衍生物。请考虑下面的 HTML 页面:
<html> <head> <title>Sample Page</title> </head> <body> <p>hello world!</p> </body> </html>
这段代码可以用 DOM 绘制成一个节点层次图:
DOM 通过创建树来表示文档,从而使开发者对文档的内容和结构具有空前的控制力。用 DOM API 可以轻松地删除、添加和替换节点。
BOM
IE 3.0 和 Netscape Navigator 3.0 提供了一种特性 - BOM(浏览器对象模型),可以对浏览器窗口进行访问和操作。使用 BOM,开发者可以移动窗口、改变状态栏中的文本以及执行其他与页面内容不直接相关的动作。使 BOM 独树一帜且又常常令人怀疑的地方在于,它只是 JavaScript 的一个部分,没有任何相关的标准。
BOM 主要处理浏览器窗口和框架,不过通常浏览器特定的 JavaScript 扩展都被看做 BOM 的一部分。这些扩展包括:
- 弹出新的浏览器窗口
- 移动、关闭浏览器窗口以及调整窗口大小
- 提供 Web 浏览器详细信息的定位对象
- 提供用户屏幕分辨率详细信息的屏幕对象
- 对 cookie 的支持
- IE 扩展了 BOM,加入了 ActiveXObject 类,可以通过 JavaScript 实例化 ActiveX 对象
由于没有相关的 BOM 标准,每种浏览器都有自己的 BOM 实现。有一些事实上的标准,如具有一个窗口对象和一个导航对象,不过每种浏览器可以为这些对象或其他对象定义自己的属性和方法。