JavaScript 实现

我们经常听到 JavaScript 和 ECMAScript,但实际上 ECMAScript 只是 JavaScript 的一部分,
除了 ECMAScript(核心)之外还包括 DOM(文档对象模型)和 BOM(浏览器对象模型)

ECMAScript

ECMAScript 由 ECMA-262 定义并提供核心功能

ECMAScript 描述了如下几个部分:

  • 语法
  • 类型
  • 语句
  • 关键字
  • 保留字
  • 操作符
  • 全局对象
    ECMAScript 只是对实现这个规范描述的所有方面的一门语言的称呼。JavaScript 实现了 ECMAScript。

DOM

提供与网页内容交互的方法和接口

文档对象模型(Document Object Model)是一个应用编程接口(API),用于在 HTMl 中使用扩展的 XML。
DOM 将整个页面抽象为一组分层节点。HTML 或 XML 页面的每个组成部分都是一种节点,包含不同的数据。如下面的 HTML 页面:

1
2
3
4
5
6
7
8
<html lang="zh">
<head>
<title>page title</title>
</head>
<body>
<p>Hello world</p>
</body>
</html>

DOM 表示创建表示文档的树,让开发者可以随心所欲地控制网页的内容和结构。使用 DOM API 可以轻松地增删改替换节点。

为什么 DOM 是必须的

在 IE4 和 Netscape Navigator 4 支持不同形式的动态 HTML(DHTML)的情况下,开发者首先可以做到不刷新页面修改
页面内容和样式。这代表了 Web 技术的一个巨大进步,但也暴露了很大的问题。由于网景和微软采用不同的思路开发 DHTML,开打折编写一个
HTML 页面就可以在任意浏览器中运行的日子结束了。
为了保持 Web 跨平台的本性,万维网联盟(W3C,World Wide Web Consortium)开始了制定 DOM 标准的进程。

DOM 级别

DOM level1:
  • DOM Core:提供了一种映射 XML 文档,可以方便访问和操作文档任意部分
  • DOM HTML:拓展了 DOM Core,并增加了特定于 HTML 的对象和方法

ps:DOM 并非只能通过 JavaScript 访问,而且确实被其他很多语言实现了。不过对于浏览器来说。DOM 就是使用 ECMAScript 实现的,如今已经成为 JavaScript 语言的一大组成部分。

DOM level2

增加了对鼠标和用户界面时间、范围、遍历(迭代 DOM 节点的方法)的支持,而且通过对象接口支持了 CSS(层叠样式表)。
另外,DOM leve1 中的 DOM 也被扩展以包含对 XML 命名空间的支持。

  • DOM 视图:描述追踪文档不同视图(如应用 CSS 样式前后的文档)的接口。
  • DOM 事件:描述事件以及事件处理的接口。
  • DOM 样式:描述处理元素 CSS 样式的接口。
  • DOM 的遍历和范围:描述操作和遍历 DOM 树的接口。
DOM level3

进一步拓展了 DOM,增加了以统一的方式加载和保存文档的方法(DOM Load and save),还有验证文档的方法(DOM validation)
DOM core 经过扩展支持了多有 XML1.0 的特性,包括 XML infoset、XPath 和 XML Base。

目前

W3C 不再按照 Level 来维护 DOM 了,而是作为 DOM living Standard 来维护,其快照称为 DOM4.DOM4 新增的内容包括替代 Mutation Events 的 Mutation Observe。

其他 DOM

除了 DOM Core 和 DOM HTML 接口,有些其他语言也发布了自己的 DOM 标准,例如:

  • 可伸缩矢量图(SVG,Scalable Vector Graphics)
  • 数学标记语言(MathML,Mathematical Markup Language)
  • 同步多媒体继承语言(SMIL,Synchronized Multimedia Integration Language)

BOM

提供与浏览器交互的方法和接口

BOM API 用于支持访问和操作浏览器的窗口。使用 BOM,开发者可以操控浏览器显示页面之外的部分。而 BOM 真正独一无二的地方也是问题最多的地方
就是他是唯一一个没有相关标准的 JavaScript 实现。目前已由 HTML5 规范化。
总体来说,BOM 主要针对浏览器窗口和子窗口(frame),不过人们通常会把任何特定于浏览器的扩展都归在 BOM 的范围内,例如:

  • 弹出新浏览器窗口的能力。
  • 移动、缩放和关闭浏览器的能力。
  • navigator 对象,提供关于浏览器的详尽信息。
  • location 对象,提供浏览器加载页面的详尽信息。
  • screen 对象,提供关于用户品目分辨率的详尽信息。
  • performance 对象,提供浏览器内存占用、导航行为和时间统计的详尽信息。
  • 对于 cookie 的支持。
  • 其他自定义对象,如 XMLHttpRequest 和 IE 的 ActiveXObject。