JavaScript学习 第一章

JavaScript简介

JavaScript诞生于 1995年。当时,它的主要目的是处理以前由服务器端语言(如 Perl)负责的一 些输入验证操作。今天的 JavaScript已经成为一门功能全面的编程语言,能够处理复杂的计算和交互,拥有了闭包、匿名(lamda, 拉姆达)函数,甚至元编程等特性。JavaScript从一个简单的输入验证器发展成为一门强大的编程语言,完全出乎人们的意料。应该说, 它既是一门非常简单的语言,又是一门非常复杂的语言。说它简单,是因为学会使用它只需片刻功夫; 而说它复杂,是因为要真正掌握它则需要数年时间。要想全面理解和掌握 JavaScript,关键在于弄清楚 它的本质、历史和局限性。

JavaScript实现

一个完整的 JavaScript 实现应该由下列三个不同的部分组成:

核心(ECMAScript)
文档对象模型(DOM)
浏览器对象模型(BOM)

1. ECMAScript

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

  • 语法

  • 类型

  • 语句

  • 关键字

  • 保留字

  • 操作符

  • 对象

ECMAScript就是对实现该标准规定的各个方面内容的语言的描述。JavaScript实现了 ECMAScript, Adobe ActionScript同样也实现了 ECMAScript。

2. ECMAScript兼容

ECMA-262给出了 ECMAScript兼容的定义。要想成为 ECMAScript的实现,则该实现必须做到:

支持 ECMA-262描述的所有“类型、值、对象、属性、函数以及程序句法和语义”(ECMA-262 第 1页);

支持 Unicode字符标准。

此外,兼容的实现还可以进行下列扩展:

添加 ECMA-262没有描述的“更多类型、值、对象、属性和函数”。ECMA-262所说的这些新增 特性,主要是指该标准中没有规定的新对象和对象的新属性。

支持 ECMA-262 没有定义的“程序和正则表达式语法”。(也就是说,可以修改和扩展内置的正 则表达式语法。)

上述要求为兼容实现的开发人员基于 ECMAScript开发一门新语言提供了广阔的空间和极大的灵活 性,这也从另一个侧面说明了 ECMAScript受开发人员欢迎的原因。

3. Web浏览器对 ECMAScript的支持

下表列出了 ECMAScript受主流 Web 浏览器支持的情况:


文档对象模型(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中,这个页面可以通过如图所示的分层节点图表示:


1. DOM级别

DOM1级由两个模块组成:DOM 核心(DOM Core)和 DOM HTML。其中,DOM核心规定的是如何映射基于 XML的文档结构,以便 简化对文档中任意部分的访问和操作。DOM HTML 模块则在 DOM 核心的基础上加以扩展,添加了针 对 HTML的对象和方法。

DOM2级在 原来 DOM的基础上又扩充了(DHTML一直都支持的)鼠标和用户界面事件、范围、遍历(迭代 DOM 文档的方法)等细分模块,而且通过对象接口增加了对 CSS(Cascading Style Sheets,层叠样式表)的 支持。DOM1级中的 DOM核心模块也经过扩展开始支持 XML命名空间。 DOM2级引入了下列新模块,也给出了众多新类型和新接口的定义。 DOM视图(DOM Views):定义了跟踪不同文档(例如,应用 CSS之前和之后的文档)视图的 接口;

DOM事件(DOM Events):定义了事件和事件处理的接口;

DOM样式(DOM Style):定义了基于 CSS为元素应用样式的接口;

DOM遍历和范围(DOM Traversal and Range):定义了遍历和操作文档树的接口。

DOM3 级则进一步扩展了 DOM,引入了以统一方式加载和保存文档的方法——在 DOM 加载和保 存(DOM Load and Save)模块中定义;新增了验证文档的方法——在 DOM验证(DOM Validation)模块中定义。DOM3 级也对 DOM 核心进行了扩展,开始支持 XML 1.0 规范,涉及 XML Infoset、XPath 和 XML Base。

2. 其他 DOM标准

除了 DOM核心和 DOM HTML接口之外,另外几种语言还发布了只针对自己的 DOM标准。下面 列出的语言都是基于 XML的,每种语言的 DOM标准都添加了与特定语言相关的新方法和新接口:

  • SVG(Scalable Vector Graphic,可伸缩矢量图)1.0;

  • MathML(Mathematical Markup Language,数学标记语言)1.0;

  • SMIL(Synchronized Multimedia Integration Language,同步多媒体集成语言)。

还有一些语言也开发了自己的 DOM实现,例如 Mozilla的 XUL(XML User Interface Language,XML 用户界面语言)。但是,只有上面列出的几种语言是 W3C的推荐标准。

3. Web浏览器对 DOM的支持

浏览器对象模型(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 这样的自定义对象。

JavaScript版本

下表列出了 Netscape/Mozilla 浏览器中 JavaScript版本号的递增过程: