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 | <html lang="zh"> |
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。