JavaScript 实现:ECMAScript & DOM & BOM

277 阅读4分钟

JavaScript 实现

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

  1. 核心 ( ECMAScript ):语言核心功能基于 ECMAScript 规范
  2. 文档对象模型 ( DOM, Document Object Model ):提供访问和操作网页内容的方法和接口,通过 document.element 对象实现。
  3. 浏览器对象模型 ( BOM, Browser Object Model ):提供与浏览器交互的方法和接口,通过 window 对象实现。

ECMAScript

由 ECMA-262 定义的 ECMAScript 与 Web 浏览器没有依赖关系。实际上,这门语言本身并不包含输入和输出定义。ECMA-262 定义的只是这门语言的基础,而在此基础之上可以构建更完善的脚本语言。我们常见的 Web 浏览器只是 ECMAScript 实现可能的 宿主环境 之一。宿主环境不仅提供基本的 ECMAScript 实现,同时也会提供该语言的扩展,以便语言与环境之间对接及交互。而这些扩展 —— 如 DOM,则利用 ECMAScript 的核心类型和语法提供更多更具体的功能,以便实现针对环境的操作。其他宿主环境包括 Node (一种服务器端的 JavaScript 平台)和 Adobe Flash。


既然 ECMAScript 标准没有参照 Web 浏览器,那它都规定了些什么内容呢?大致说来,它规定了这门语言的下列组成部分:

  • 语法
  • 类型
  • 语句
  • 关键字
  • 保留字
  • 操作符
  • 对象

ECMAScript 就是对实现该标准规定的各个方面内容的语言的描述。JavaScript 实现了 ECMAScript,Adobe ActionScript 同样也实现了 ECMAScript。 关于ActionScript:zh.wikipedia.org/wiki/Action…

DOM

文档对象模型(DOM,Document Object Model)是针对 XML但经过扩展用于 HTML的应用程序编 程接口(API,Application Programming Interface)。DOM把整个页面映射为一个多层节点结构。HTML 或 XML页面中的每个组成部分都是某种类型的节点,这些节点又包含着不同类型的数据。看下面这个 HTML页面:

<html>
     <head>
     	<title>sample Page</title>
     </head>
     <body>
     	<p>Hello World!</p>
     </body>
</html>

在 DOM中,这个页面可以通过下图所示的分层节点图表示。 在这里插入图片描述 通过 DOM 创建的这个表示文档的树形图,开发人员获得了控制页面内容和结构的主动权。借助 DOM提供的 API,开发人员可以轻松自如地删除、添加、替换或修改任何节点

BOM

Internet Explorer 3和 Netscape Navigator 3有一个共同的特色,那就是支持可以访问和操作浏览器窗 口的浏览器对象模型 (BOM,Browser Object Model)。开发人员使用 BOM可以控制浏览器显示的页面 以外的部分。而 BOM真正与众不同的地方(也是经常会导致问题的地方),还是它作为 JavaScript实现 的一部分但却没有相关的标准。这个问题在 HTML5中得到了解决,HTML5致力于把很多 BOM功能写 入正式规范。HTML5发布后,很多关于 BOM的困惑烟消云散。 从根本上讲,BOM只处理浏览器窗口和框架;但人们习惯上也把所有针对浏览器的 JavaScript扩展 算作 BOM的一部分。下面就是一些这样的扩展:

  • 弹出新浏览器窗口的功能;
  • 移动、缩放和关闭浏览器窗口的功能;  提供浏览器详细信息的 navigator 对象;  提供浏览器所加载页面的详细信息的 location 对象;
  • 提供用户显示器分辨率详细信息的 screen 对象;
  • 对 cookies的支持;
  • 像 XMLHttpRequest 和 IE的 ActiveXObject 这样的自定义对象。 由于没有 BOM标准可以遵循,因此每个浏览器都有自己的实现。虽然也存在一些事实标准,例如 要有 window 对象和 navigator 对象等,但每个浏览器都会为这两个对象乃至其他对象定义自己的属 性和方法。现在有了 HTML5,BOM实现的细节有望朝着兼容性越来越高的方向发展。

JavaScript 与 ECMAScript 的关系

  • ECMAScript 是由 ECMA-262 制定的标准,用于实现通用的脚本语言。
  • JavaScript 是对 ECMAScript 标准的实现。 简单来说,ECMAScript 是 JavaScript 的规范,JavaScript 是 ECMAScript 的一种实现。

本文章绝大部分摘抄自 Nicholas C.Zakas 的《JavaScript 高级程序设计》(第3版) 第一章,部分内容为原创,部分书中内容未写入文章中,如要看完整内容请查看《JavaScript 高级程序设计》(第3版) 书籍第一章。