《JavaScript高级程序设计》学习笔记(一)JavaScript简介

时间:2022-08-26 16:20:47

Write By Monkeyfly

以下内容均为原创,如需转载请注明出处。

第一章 JavaScript简介

主要内容

1.JavaScript的简史
2.JavaScript的实现
3.JavaScript的版本

要想全面的理解和掌握JavaScript,关键在于弄清楚它的:本质、历史和局限性。

1.1 JavaScript的简史(诞生于1995年)

(1)JavaScript是什么?

1.在JavaScript问世之前:表单数据必须发送到服务器端才能确定输入是否有误。

2.在JavaScript问世之后:它被用来在客户端处理一些输入验证操作(**在这之前这些操作本该是由服务器端来负责的**)

3.自此以后:JavaScript成为浏览器必备的一项特色功能。

4.到如今:JavaScript的用途不再局限于简单的数据验证,而是具备了与浏览器窗口和内容进行交互的能力。

5.在今天:JavaScript已经成为一门功能全面的编程语言,能处理复杂的计算和交互,拥有了闭包、匿名函数、元编程等特性。
而且手机浏览器也开始支持它。

在这里给大家说一个典型的例子:

微软拥有自己的客户端脚本语言VBScript,但是它仍然在早期的IE版本中加入了自己的JavaScript实现,即Jscript。

注:Jscript是基于Netscape(网景公司) JavaScript 1.0版本开发的。

(2)JavaScript的历史

为了完成一系列简单的表单验证而频繁的与服务器交换数据,只会加重用户的负担,因为整个等待时间过于漫长,效率也比较低。(试想想,如果提交表单后,必须等待30秒左右,服务器才能做出响应呢?)

为了解决这种问题(处理简单的服务器验证)

当时走在技术革新最前沿的Netscape公司,决定开发一种新的客户端语言,用于自家的浏览器上。

当时由就职于网景公司的布兰登 ● 艾奇着手为即将发布的Netscape Navigator 2 开发一种名为LiveScript的脚本语言。—–该语言将同时在浏览器和服务器中使用。

为了赶在发布日期前完成LiveScript的开发,Netscape与Sun公司建立了一个开发联盟。

前提: Netscape为了提升自己语言的知名度,为了让Livescript被更多的人熟知和关注(当时,java语言非常火爆,在全世界盛行)

其实是想借java的知名度上位。于是,在Netscape Navigator 2发布前夕,临时将LiveScript改名为JavaScript(1.0版本)。

因此,JavaScript 1.0在当时大获成功。紧接着,Netscape公司又在Netscape Navigator 3中发布了JavaScript 1.1版本。

网景公司的这一做法撼动了当时微软的地位,抢走了微软的风头。因为当时由微软开发的Windows操作系统大约占据了全球95%的市场份额,几乎处于垄断地位。为了推广自家研发的浏览器,肯定在每台用户电脑的操作系统中都捆绑安装了IE浏览器。但不幸的是,这一美好的愿景被Netscape公司的JavaScript打断了。一瞬间,热度和关注度都被JavaScript抢走了,因为当时的JavaScript实在是太火了,名声快就盖过了IE(毕竟IE当时还处于推广期间)。此时的微软心里当然很不爽,很不高兴,肯定不愿意看到被别人抢占了自己的风头。

于是呢,微软就基于JavaScript又开发了自己的脚本语言,并且命名为JScript。(乍一看,跟JavaScript就像亲兄弟一样)

为什么不命名为JavaScript呢?
肯定是为了避免抄袭的嫌疑,实际上是为了避开与Netscape公司有关的授权问题。

此时,市面上就存在了两种不同的 JavaScript 版本,即Netscape Navigator(网景公司的浏览器)中的 JavaScript 与 IE 中的 JScript

两个版本共存的局面终于出现了,而且在当时根本就没有标准规定JavaScript的语法和特性。

业界的担心日益加剧……

随后,JavaScript的标准化问题就被提上了议事日程。

在1997年,将该项建议提交给了ECMA(欧洲计算机制造商协会)。

该协会指定由39号技术委员会(简称,T39)负责此事。

T39中的成员是由来自网景、微软、Sun及其他关注脚本语言发展的公司中的程序员所组成。

经过数月的努力,最终完成了ECMA-262(新的标准名称)。

可能有人会有疑问?为什么非要叫ECMA-262呢?答案是:人家就是这么规定的,哪来那么多为什么。知道并且记住就行了。

  • ECMA-262,它定义了一种 名为ECMAScript的新脚本语言的 标准。

在第二年,ISO/IEC(即国际标准化组织/国际电工委员会)也采用了ECMAScript作为标准,即命名为ISO/IEC-16262。

此后,各大浏览器开发商就都视它为标准,并且都将ECMAScript作为自己的JavaScript实现的基础。

因此,(根据上述大量的历史信息,做一个小小的总结)

1.ECMAScript是由ECMA指定的,一种标准化的脚本语言。

2.ECMA-262只不过是最初开发完成ECMAScript的一个版本号而已。

3.后来,ECMAScript又被国际标准化组织采纳了,并将之命名为ISO/IEC-262。

4.目前,JavaScript使用的ECMAScript版本为ECMA-262。

1.2 JavaScript的实现(ECMAScript,DOM和BOM)

虽然人们一般将ECMAScript称为JavaScript(认为它们两个表达相同的含义),但是JavaScript的含义要比ECMA-262中规定的多得多。

一个完整的JavaScript实现由三部分组成:ECMAScript、DOM 和 BOM

1.ECMAScript:核心
2.DOM:文档对象模型
3.BOM:浏览器对象模型
1.2.1 ECMAScript
1.由ECMA-262定义的ECMAScript与浏览器没有依赖关系。

2.ECMA-262定义的只是ECMAScript这门语言的基础,在此基础上还可以构建更完善的脚本语言。

3.Web浏览器只是ECMAScript实现可能的一种宿主环境。

宿主环境:在计算机环境下,一个软件赖以生存的环境被称为宿主环境。
比如,JavaScript需要在浏览器中运行。其中,浏览器就是宿主环境。

4.宿主环境不仅提供基本的ECMAScript实现,同时也会提供对该语言的扩展(为了语言与环境之间对接交互)。

5.宿主环境提供的扩展:比如说DOM。
利用ECMAScript的核心类型和语法提供更多更具体的功能,以便实现针对环境的操作。

6.其他的宿主环境:
Node(一种服务端的JavaScript平台)
Adobe Flash

ECMA-262标准都规定了哪些内容呢?

它规定了这门语言(ECMAScript)的组成部分:语法、类型、语句、关键字、保留字、操作符、对象。

ECMAScript就是对实现ECMA-262标准所规定的各个方面内容的语言的描述。

理解起来就是:
(1)对……的描述。
(2)对……的语言的描述。
(3)对实现一个……的语言的描述。

简单来说,就是:ECMAScript是对实现ECMA-262规定的语言的描述。

因此,对于ECMAScript我们要知道:

1.ECMAScript是一种脚本语言,而ECMA-262指定了一门脚本语言的标准。因此,ECMAScript实现了这一标准。

2.JavaScript实现了ECMAScript,Adobe ActionScript也同样实现了ECMAScript。

(1)ECMAScript的版本

ECMA-262第1版:本质上它与Netscape的JavaScript 1.1版本相同,只不过删除了所有针对浏览器的代码并做了一些较小的改动。

改动:
1、ECMA-262要求支持Unicode标准。(为了支持多语言开发)
2、对象也变成了与平台无关的。

ECMA-262第2版:主要是编辑加工的结果。

为了保持与ISO/IEC-16262的严格一致,没有做任何增删改处理。

ECMA-262第3版:这一版才是对该标准的第一次真正的修改。这标志着ECMAScript成为了一门真正的编程语言。

修改的内容涉及:
1、字符串处理、错误定义和数值输出。
2、新增了对正则表达式、新控制语句、try-catch异常处理的支持。
3、围绕标准的国际化进行了一些小的改动。

ECMA-262第4版:对这门语言进行了一次全面的检核修订。

1、为了满足不断增长的web开发需求,ECMA T39技术委员会重新召集相关人员来共同谋划这门语言的未来。结果,出台后的标准几乎在底3版的基础上完全定义了一门新的语言。
2、此时,TC39下属的一个小组提出了一个名为ECMAScript 3.1 的替代性建议,它对这门语言进行了较少的改进。
3、第4版对ECMAScript带来的跨越太大了。所以,该小组建议只对ECMAScript进行小幅修订就行了,完全没必要进行这么大的改动。
当然,最后该建议被采纳了。因此,ECMA-262第4版在正式发布前被放弃了。

ECMA-262第5版:即ECMAScript 3.1,并于2009年12月3日正式发布。该版本力求澄清第3版中已知的歧义并增加了新的功能。

新功能包括:
1、原生json对象(用于解析和序列化json数据)
2、继承的方法和高级属性定义
3、严格模式(对ECMAScript引擎 解释和执行代码进行了补充说明)

(2)什么是ECMAScript兼容?
ECMA-262给出了ECMAScript兼容的定义。即要想成为ECMAScript的实现,则该实现必须做到:

1、支持ECMA-262描述的所有基本语法和语义。
2、支持Unicode字符标准。

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

1、添加ECMA-262中没有描述的“更多类型、值、对象、属性和函数”。
这些新增特性主要是指,该标准中未规定的新对象和对象的新属性。
2、支持ECMA-262未定义的“程序和正则表达式语法”。

这也从侧面反映了ECMAScript受开发人员欢迎的原因。

(3)Web对ECMAScript的支持

1、直到2008年,五大主流web浏览器才全部实现了与ECMA-262兼容。

五大主流浏览器:IE、Firefox、Safari、Chrome 和 Opera。

2、IE8是第一个着手实现ECMA-262第5版的浏览器,并在IE9中提供了完整的支持。


1.2.2 DOM——文档对象模型

定义:

它是针对XML的,但是经过扩展后,才用于HTML的API(应用程序接口,Application Programming Interface)。

说明:

1、DOM将整个页面映射为一个多层的节点结构。
2、HTML或XML页面中的每个组成部分,都可以看成是某种类型的节点,该节点又包含着不同类型的数据。

这是一个HTML页面:

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

但是在DOM中,该页面可以用如下的树形结构来表示:(分层节点图)
html
|
|—head

|—title >Sample Page

|
|—body

|—p >Hello World!

通过DOM来创建的这个表示文档的树形图,开发人员获得了控制页面内容和结构的主动权。

借助DOM提供的API,开发人员可以轻易的增、删、改和替换任何节点。

1、问题:为什么要用DOM?不用不行吗?
答案:不用DOM肯定不行。究其原因,肯定是因为网景和微软这两家公司了,那还用问。

具体原因如下:

1. IE 4 和 Netscape Navigator 4 分别支持不同形式的DHTML。(Dynamic HTML,即动态的HTML)
2. DHTML技术,即开发人员首次无需重新加载网页,就可以修改其外观和内容了。非常方便。
3. Netscape与微软在开发DHTML方面各执己见,争执不休,导致以前一个HTML页面能够在任意浏览器运行的时代结束了。

照这样发展下去肯定是不行的:

 1.对开发人员来说,为了保持让web跨平台运行,必须多做一些工作。
2.但是对所有人来说,如果不对他们两家公司加以控制,那么web开发领域就会出现技术上的两强割据,浏览器互不兼容的局面。

当然,这种事情大家都不愿意看到。
此时,负责制定web通信标准的W3C(Wrold Wide Web Consortium,世界万维网联盟)开始着手规划DOM。
.
2、DOM级别 (DHTML一直都支持)
(1)DOM1级(DOM Level 1):DOM Core 和 DOM HTML

DOM 1 级于1998年10月成为W3C的推荐标准。
DOM 1 级的目标:映射文档的结构。

  • DOM 核心:规定如何映射基于XML的文档结构,以便简化对文档中任意部分的访问和操作。
  • DOM HTML:在DOM核心的基础上加以扩展,添加了针对HTML的对象和方法。

注意:

DOM并不只是针对JavaScript的,很多别的语言也都实现了DOM。

但是,在web浏览器中,基于ECMAScript实现的DOM已成为JavaScript的一个重要组成部分。

(2)DOM2级(DOM Level 2):DOM View 、 DOM Events 、DOM Style 、DOM Traversal and Range

  • DOM视图:定义了跟踪不同文档(应用CSS前后的文档)视图的接口。
    (DOM View)
  • DOM事件:定义了事件和事件处理的接口。
    (DOM Events)
  • DOM样式:定义了基于CSS为元素应用样式的接口。
    (DOM Style)
  • DOM遍历和范围:定义了遍历和操作文档树的接口。
    (DOM Traversal and Range)

(3)DOM3级(DOM Level 3):DOM Load 和 Save、 DOM Validation 和 DOM Core的扩展

  • DOM加载和保存:在该模块中,引入了以统一方式加载和保存文档的方法。
  • DOM验证:在该模块中的定义了验证文档的方法。
  • DOM核心的扩展:开始支持XML1.0规范,涉及XML Infoest、XPath和XMLBase。

注意:

1、DOM 0级 标准是不存在的。
2、所谓的DOM 0级 只是DOM历史坐标中的一个参照点而已。
3、具体来说,DOM 0级 是指 IE 4.0 和 Netscape Navigator 4.0 最初支持的DHTML。

3.web浏览器对DOM的支持
(1)微软在 IE 5 中首次尝试实现DOM,但直到 IE 5.5 才算是真正支持DOM 1 级。

*在随后的IE 6 和 IE 7 中,都没有引入新的DOM功能。
*而到了IE 8 才对以前DOM实现中的bug进行了修复。

(2)网景公司直到 Netscape 6(Mozilla 0.6.0)才开始支持DOM。

*在Netscape 7 之后,Mozilla把开发重心转向了火狐浏览器。
*Firefox 3 完全支持 DOM 1 级,几乎完全支持 DOM 2 级,部分支持 DOM 3 级。

Mozilla 开发团队的目标是:构建与标准100%兼容的浏览器。

目前,支持DOM已经成为浏览器开发商的首要目标。

1.2.3 BOM——浏览器对象模型
1.IE 3 和 Netscape 3 都支持可以访问和操作浏览器窗口的BOM。
2.开发人员使用BOM可以控制浏览器显示页面以外的地方。
3.而BOM真正与众不同的地方(也是经常导致问题的地方),还是它作为JavaScript实现的一部分但却没有相关的标准。
4.这个问题在HTML5中得到了解决。
5.HTML5致力于把很多BOM功能写入正式规范。

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

所有针对浏览器的JavaScript扩展:

1.弹出新浏览器窗口的功能;
2.移动、缩放和关闭浏览器窗口的功能;
3.提供浏览器详细信息的navigator对象;
4.提供浏览器所加载页面的详细信息的location对象;
5.提供用户显示器分辨率详细信息的screen对象;
6.对cookies的支持;
7.像XMLHyypRequest 和 IE的ActiveXObject这样的自定义对象;

因为BOM没有标准可遵循,所以每个浏览器都有自己的实现方式。而现在有了HTML5,BOM实现的细节有望朝着兼容性更高的方向发展。

1.3 JavaScript的版本

作为Netscape“继承人”的Mozilla公司,是目前唯一一个还在沿用最初的JavaScript版本编号序列的浏览器开发商。
在Netscape将源代码提交给开源的Mozilla项目时,JavaScript在浏览器中的最后一个版本号是1.3。
后来,随着Mozilla基金会继续开发JavaScript,添加新的特性、关键字和语法,JavaScript的版本号继续递增。

注意

1、只有Netscape/Mozilla浏览器才遵循这种编号模式。
2、而且,大多数浏览器在提及对JavaScript的支持情况时,一般都以ECMAScript兼容性和对DOM的支持情况为准。