第一章 JavaScript简介《JavaScript高级程序设计》

ぃ、小莉子 提交于 2019-11-26 10:35:39

本系列文章是《JavaScript高级程序设计》(第二版) 中文 的缩水版,希望通过对书籍内容的转述,一方面能加深自己对于JavaScript的理解,另一方面也能让其他人学习了解JavaScript这门语言。如有不对的地方,请指正,我会在第一时间进行更改。如需转载请注明出处。

1.1 JavaScript 简史(选读)

    JavaScript 诞生于1995年,最初由 Netscape 公司的 布兰登・艾奇

(Brendan Eich)负责开发,命名为LiveScript(它在服务器上的名字叫LiveWire )。为了加快开发进度,Netscape 与 Sun 公司建立了一个开发联盟。在正式发布前夕,Netscape 为了搭上媒体热炒 Java 的顺风车,临时把 LiveScript 改名为 JavaScript 。JavaScript 是种嵌入式脚本语言,运行在该公司的 Navigator 浏览器上(年纪大的人都记得,当时这款浏览器很牛X的)。

    JavaScript 取得巨大成功后,微软为了与 Navigator 竞争,也向自家IE浏览器加入了名为 JScript 的 JavaScript 实现(命名为 JScript 是为了避开与 Netscape 有关的授权问题)。

    1992年前后,一家名为 Nombas 的公司开发了一种嵌入式脚本语言,并将其命名为 C-minus-minus(简称 Cmm)。这个脚本语言被打包到共享软件CEnvi中。之后,该公司把 Cmm 改名为 ScriptEase 。在 Netscape Navigator 受到人们狂热追捧之际,Nombas 公司开发了能够嵌入到网页中的 CEnvi版本。而这种嵌入 CEnvi的早起试验性网页被叫做 Espresso Pages(浓咖啡版网页),它们是在万维网上首次使用脚本语言的标志。这种在网页中嵌入脚本的思想很大程度上影响了之后 JavaScript 的诞生 和 因特网未来的发展。

    微软推出其 JavaScript 实现意味着有了3个不同的 JavaScript 版本:Netscape Navigator 中的JavaScript 、IE 中的 Jscript 和 ScriptEase 中的 CEnvi。

    为了解决标准不统一的问题,1997年,以 JavaScript 1.1 为蓝本的建议被提交给了欧洲计算机制造商协会。该协会指定 39 号技术委员会(TC39,Technical Committee #39 )负责 “标准化一种通用、跨平台、供应商中立的脚本语言的语法和语义”。TC39 由来自 Netscape、Sun、微软、Borland 及其他关注脚本语言发展的公司的程序员组成,他们经过数月的努力完成了 ECMA-262 —— 定义一种名为 ECMAScript 的新脚本语言的标准。

    1998年,ISO/IEC 也采用了 ECMAScript 作为标准(即 ISO/IEC-16262)。自此,浏览器开发商就开始致力于将 ECMAScript 作为各自 JavaScript 实现的基础,也在不同程度上取得了成功。

1.2 JavaScript 实现

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


1.2.1 ECMAScript

    ECMA-262 标准规定了这门语言的下列组成部分:

 (1)语法

(2)类型

(3)语句

(4)关键字

(5)保留字

(6)操作符

(7)对象

    ECMAScript 就是对实现该标准规定的各个方面内容的语言的描述。JavaScript 、Adobe ActionScript 和OpenView ScriptEase 都实现了ECMAScript。

  1. ECMAScript 的版本(选读)

    ECMA-262 第 1 版:本质上与 Netscape 的 JavaScript 1.1 相同——只不过删除了所有针对浏览器的代码并作了一些小改动:ECMA-262 要求支持 Unicode 标准(从而支持多语言开发),而且对象也变成了平台无关的(Netscape JavaScript 1.1 的对象在不同平台中的实现不一样,例如 Date 对象)。这也是 JavaScript 1.1和 1.2 与 ECMA-262 第 1 版不一致的原因。

    ECMA-262 第 2 版:主要是编辑加工的结果。这一版中内容的更新是为了与 ISO/IEC-16262 保持严格一致,没有作任何新增、修改或删节处理。因此,一般不是用 第 2 版来衡量 ECMAScript 实现的兼容性。

    ECMA-262 第 3 版:这一版才是对该标准第一次真正的修改。修改的内容涉及字符串处理、错误定义和数值输出。而且还新增了对正则表达式、新控制语句、try-catch 异常处理的支持,并围绕标准的国际化做出了一些小的修改。从各方面综合来看,第 3 版标志着 ECMAScript 成为了一门真正的编程语言。

    ECMA-262 第 4 版:这一版对这门语言进行了一次全面的检核修订。由于 JavaScript 在 Web 上日益流行,开发人员纷纷建议修订 ECMAScript,以使其能够满足不断增长的 Web 开发需求。作为回应,ECMA TC39 重新召集相关人员共同谋划这门语言的未来。结果,出台后的标准几乎在第 3 版基础上完全定义了一门新语言。第 4 版不仅包含了强类型变量,心语句和新数据结构、真正的类和经典继承,还定义了与数据库交互的新方式(以后会有讨论)。

    与此同时,TC39 下属的一个小组也提出了一个名为 ECMAScript 3.1 的替代性建议,该建议只对这门语言进行了较少的改进。这个小组认为第 4 版给这门语言带来的跨越太大了。因此,该小组建议对这门语言进行小幅修订。

    2.什么是 ECMAScript 兼容(选读)

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

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

    (2)支持 Unicode 字符标准。

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

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

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

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

    3.Web 浏览器对 ECMAScript 的支持

    

    1.2.2 文档对象模型( DOM )

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

<html>
    <head>
        <title>Sample Page</title>
    </head>

    <body>
        <p>Hello World ! </p>
    </body>
</html>

    在 DOM 中,这个页面可以通过下图所示的分层节点图表示。

    通过 DOM 创建的这个表示文档的树形图,开发人员获得了控制页面内容和结构的主动权。借助 DOM 提供的 API,开发人员可以轻松自如地删除、添加、替换或修改任何节点。( 这也是前端开发人员所做的主要工作之一 )


    1. 为什么要使用 DOM

    在 IE4 和 Netscape Navigator 4 分别支持的不同形式的 DHTML(Dynamic HTML)基础上,开发人员首次无需重新加载网页,就可以修改其外观和内容了。


    2.DOM 级别 (选读)

    DOM1 级(DOM Level 1)于 1998年10月 成为 W3C(World Wide Web Consortium,万维网联盟,负责制定 Web 通信标准 )的推荐标准。DOM1 级由两个模块组成:DOM核心(DOM Core)和 DOM HTML。其中,DOM核心规定的是如何映射基于 XML 的文档结构,以便简化对文档中任意部分的访问和操作。DOM HTML 模块则在 DOM 核心的基础上加以扩展,添加了针对 HTML 的对象和方法。

    请读者注意,DOM 并不只是针对 JavaScript 的,很多别的语言也都实现了 DOM。不过,在Web浏览器中,基于 ECMAScript 实现的 DOM 的确已经成为 JavaScript 这门语言的一个重要组成部分。

    DOM2 级:如果说 DOM1 级的目标主要是映射文档的结构,那么 DOM2 级的目标就要宽泛多了。DOM2 级在原来 DOM 的基础上又扩充了(DHTML 一直都支持的)鼠标和用户界面事件、范围、遍历(迭代DOM文档的方法)等细分模块,而且通过对象接口增加了对 CSS(Cascading Style Sheets,层叠样式表)的支持。DOM1 级中的 DOM 核心模块也经过扩展开始支持 XML 命名空间。

    DOM2 级引入了下列新模块,也给出了众多新类型和新接口的定义:

    1、DOM 视图(DOM Views)——定义了跟踪不同文档(例如,应用 CSS 之前和之后的文档)视图的接口;

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

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

    4、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。

    在阅读 DOM 标准的时候,你可能会看到 DOM0 级(DOM Level 0)的字眼。实际上,DOM0 级标准是不存在的;所谓 DOM0 级只是 DOM 历史坐标中的一个参照点而已。具体说来,DOM0 级指的是 IE4 和 Netscape Navigator 4.0 最初支持的 DHTML。


    3.其他 DOM 标准(选读)

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

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

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

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

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

    4.Web 浏览器对 DOM 的支持


    1.2.3 浏览器对象模型(BOM)

    IE3 和 Netscape Navigator3 有一个共同的特色,那就是支持可以访问和操作浏览器窗口的浏览器对象模型(BOM,Browser Object Model)。开发人员使用 BOM 可以控制浏览器显示的页面以外的部分。而 BOM 真正与众不同的地方(也是经常会导致问题的地方),还是它作为 JavaScript 实现的一部分,至今仍没有相关的标准。

    从根本上讲,BOM 只处理浏览器窗口和框架;但人们习惯上也把所有针对浏览器的 JavaScript 扩展算作 BOM 的一部分。下面就是一些这样的扩展:

    (1)弹出新浏览器窗口的功能;

    (2)移动、缩放和关闭浏览器窗口的功能;

    (3)提供浏览器详细信息的 navigator 对象;

    (4)提供浏览器所加载页面的详细信息的 location 对象;

    (5)提供用户显示器分辨率详细信息的 screen 对象;

    (6)对 cookies 的支持;

    (7)像 XMLHttpRequest 和 IE 的ActiveXObject 这样的自定义对象。

    由于没有 BOM 标准可以遵循,因此每个浏览器都由自己的实现。虽然也存在一些事实标准,例如要有 window 对象和 navigator 对象等,但每个浏览器都会为这两个对象仍至其他对象定义自己的属性和方法。

    1.3 JavaScript 版本

    身为 Netscape “继承人” 的 Mozilla 公司,是目前唯一还在沿用最初的 JavaScript 版本编号序列的浏览器开发商。在 Netscape 将源代码提交给开源的 Mozilla 项目的时候,JavaScript 再浏览器中的最后一个版本号是 1.3.(如前所述,1.4版本是只针对服务器的实现。)后来,随着 Mozilla 基金会继续开发 JavaScript,添加新的特性、关键字和语法,JavaScript 的版本号继续递增。下表列出了 Netscape/Mozilla 浏览器中 JavaScript 版本号的递增过程


    实际上,上表中的编号方案源自 Firefox 4 将内置 JavaScript 2.0 这一共识。因此,2.0版本之前每个递增的版本号,表示的是相应实现与 JavaScript 2.0 开发目标还有多大的距离。虽然原计划是这样,但在 ECMAScript3.1 建议日益受到人民关注的情况下,Mozilla 是否还会继续这个编号传统就不得而知了。


    1.4 小结

    JavaScript 是一种专为与网页交互而设计的脚本语言,由下列三个不同的部分组成:

    1、ECMAScript,由 ECMA-262 定义,提供核心语言功能;

    2、文档对象模型(DOM),提供访问和操作网页内容的方法和接口;

    3、浏览器对象模型(BOM),提供与浏览器交互的方法和接口。

    JavaScript 的这三个组成部分,在当前五个主要浏览器(IE、Firefox、Chrome、Safari 和 Opera)中都得到了不同程度的支持。其中,所有浏览器对 ECMAScript 第 3 版的支持大体上都还不错,但对 DOM 的支持则彼此相差比较多。对 JavaScript 中唯一尚无标准的 BOM 来说,尽管各浏览器都实现了某些众所周知的共同特性,但其他特性还是会因浏览器而异。

    



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!