- 浏览: 535931 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
July01:
推荐用StratoIO打印控件,支持网页、URL、图片、PD、 ...
总结JS打印方法 -
aswift:
标题struts不是strust
Strust组件—ActionServlet详解 -
July01:
推荐用StratoIO打印控件,浏览器和系统的兼容性都很好,而 ...
总结JS打印方法 -
July01:
推荐用StratoIO打印控件,浏览器和系统的兼容性都很好,而 ...
总结JS打印方法 -
zi_wu_xian:
POI操作Excel文档过于复杂了,还是用PageOffice ...
POI操作Excel文档-基础篇
当JavaScript在1995年首次出现时,它的主要目的还只是处理一些输入的有效性验证,而在此之前这个工作是留给诸如Perl之类的服务器端语言来完成的。之前,要确定一个特定的字段是否空缺或者输入的值是否无效,必须与服务器进行往返的交互。Netscape Navigator 通过引入JavaScript 来试图改变这种情况。这种直接在客户端处理一些基本的有效性验证的能力,在刚普及使用电话线调制解调器(28.8kbit/s的速率)的时代,可是一个令人振奋的新特性。但以如此慢的速度与服务器往返交互,对耐性是一种考验。
从那以后,JavaScript便成长为市面上每一个主要Web浏览器都具备的重要特性。同时JavaScript不仅仅局限于简单的数据有效性验证,现在几乎可以与浏览器窗口及其内容的每一个方面进行交互。微软公司在早期版本的浏览器中仅支持自己的客户端脚本语言——VBScript,但最后也不得不加入了自己的JavaScript实现。
从本章中你可以了解到JavaScript是如何以及为何出现的,从它简陋的开始到如今涵盖各种特性的实现。为了能充分发挥JavaScript全部的潜力,了解它的本质、历史及局限性是十分重要的。确切地说,本章着重讲解:
一.JavaScript和客户端脚本编程的起源;
二. JavaScript语言的不同部分;
三. 与JavaScript相关的标准;
四. 主流Web浏览器中的JavaScript支持。
1.1 历史简述
大概在1992年,一家称作Nombas的公司开始开发一种叫做C减减(C-minus-minus,简称Cmm)的嵌入式脚本语言。Cmm背后的理念很简单:一个足够强大可以替代宏操作(macro)的脚本语言,同时保持与C(和C++)足够的相似性,以便开发人员能很快学会。这个脚本语言捆绑在一个叫做CEnvi的共享软件产品中,它首次向开发人员展示了这种语言的威力。Nombas最终把Cmm的名字改成了ScriptEase,原因是后面的部分(mm)听起来过于“消极”,同时字母C“令人害怕”(http://www.nombas.com/us/scripting/history.htm)。现在ScriptEase已经成为了Nombas产品背后的主要驱动力。当Netscape Navigator崭露头角时,Nombas开发了一个可以嵌入网页中的CEnvi的版本。这些早期的试验称为Espresso Page(浓咖啡般的页面),它们代表了第一个在万维网上使用的客户端脚本语言。而Nombas丝毫没有料到它的理念将会成为因特网的一块重要基石。
当网上冲浪越来越流行时,对于开发客户端脚本的需求也逐渐增大。此时,大部分因特网用户还仅仅通过28.8kbit/s的调制解调器来连接到网络,即便这时网页已经不断地变得更大和更复杂。而更加加剧用户痛苦的是,仅仅为了简单的表单有效性验证,就要与服务器端进行多次的往返交互。设想一下,用户填完一个表单,点击提交按钮,等待了30秒钟的处理后,看到的却是一条告诉你忘记填写一个必要的字段。那时正处于技术革新最前沿的Netscape,开始认真考虑一种开发客户端脚本语言来解决简单的处理问题。
当时工作于Netscape的Brendan Eich,开始着手为即将在1995年发行的Netscape Navigator 2.0开发一个称之为LiveScript的脚本语言,当时的目的是同时在浏览器和服务器(本来要叫它LiveWire的)端使用它。Netscape与Sun公司联手及时完成LiveScript实现。就在Netscape Navigator 2.0即将正式发布前,Netscape将其更名为JavaScript,目的是为了利用Java这个因特网时髦词汇。Netspace的赌注最终得到回报,JavaScript从此变成了因特网的必备组件。
因为JavaScript 1.0如此成功,Netscape在Netscape Navigator 3.0中发布了1.1版。恰巧那个时候,微软决定进军浏览器,发布了IE 3.0 并搭载了一个JavaScript的克隆版,叫做JScript(这样命名是为了避免与Netscape潜在的许可纠纷)。微软步入Web浏览器领域的这重要一步虽然令其声名狼藉,但也成为JavaScript语言发展过程中的重要一步。
在微软进入后,有3种不同的JavaScript版本同时存在:Netscape Navigator 3.0中的Java- Script、IE中的JScript以及CEnvi中的ScriptEase。与C和其他编程语言不同的是,JavaScript并没有一个标准来统一其语法或特性,而这3种不同的版本恰恰突出了这个问题。随着业界担心的增加,这个语言标准化显然已经势在必行。
1997年,JavaScript 1.1作为一个草案提交给欧洲计算机制造商协会(ECMA)。第39技术委员会(TC39)被委派来“标准化一个通用、跨平台、中立于厂商的脚本语言的语法和语义”(http://www.ecma-international.org/memento/TC39.htm)。由来自Netscape、Sun、微软、Borland和其他一些对脚本编程感兴趣的公司的程序员组成的TC39锤炼出了ECMA-262,该标准定义了叫做ECMAScript的全新脚本语言。
在接下来的几年里,国际标准化组织及国际电工委员会(ISO/IEC)也采纳ECMAScript作为标准(ISO/IEC-16262)。从此,Web浏览器就开始努力(虽然有着不同程度的成功和失败)将ECMAScript作为JavaScript实现的基础。
尽管ECMAScript是一个重要的标准,但它并不是JavaScript唯一的部分,当然,也不是唯一被标准化的部分。实际上,一个完整的JavaScript实现是由以下3个不同部分组成的(见图1-1):
1.. 核心(ECMAScript)
2. 文档对象模型(DOM)
3. 浏览器对象模型(BOM)
图 1-1
1.2.1 ECMAScript
ECMAScript并不与任何具体浏览器相绑定,实际上,它也没有提到用于任何用户输入输出的方法(这点与C这类语言不同,它需要依赖外部的库来完成这类任务)。那么什么才是ECMAScript呢?ECMA-262标准(第2段)的描述如下:
“ECMAScript可以为不同种类的宿主环境提供核心的脚本编程能力,因此核心的脚本语言是与任何特定的宿主环境分开进行规定的……”
Web浏览器对于ECMAScript来说是一个宿主环境,但它并不是唯一的宿主环境。事实上,还有不计其数的其他各种环境(例如Nombas的ScriptEase和Macromedia同时用在Flash与Director MX中的ActionScript)可以容纳ECMAScript实现。那么ECMAScript在浏览器之外规定了些什么呢?简单地说,ECMAScript描述了以下内容:
-语法;
- 类型;
- 语句;
- 关键字;
- 保留字;
- 运算符;
-对象。
ECMAScript仅仅是一个描述,定义了脚本语言的所有属性、方法和对象。其他的语言可以实现ECMAScript来作为功能的基准,JavaScript就是这样(见图1-2)。
图 1-2
每个浏览器都有它自己的ECMAScript接口的实现,然后这个实现又被扩展,包含了DOM和BOM(在以下几节中再讨论)。当然还有其他实现并扩展了ECMAScript的语言,例如Windows脚本宿主(Windows Scripting Host,WSH)、Macromedia的Flash与Director MX中的ActionScript,以及Nombas ScriptEase。
1.ECMAScript的版本
ECMAScript分成几个不同的版本,它是在一个叫做ECMA-262的标准中定义的。和其他标准一样,ECMA-262会被编辑和更新。当有了主要更新时,就会发布一个标准的新版。最新ECMA-262的版本是第三版,于1999年12月发布。ECMA-262的第一个版在根本上是和Netscape的JavaScript 1.1一样的,只是把所有与浏览器相关的代码删除了,不过有一些小的调整。首先,ECMA-262要求对Unicode标准的支持(以便支持多语言)。第二,它要求对象是平台无关的(Netscape的JavaScript 1.1事实上有不同的对象实现,例如Date对象,是依赖于平台的)。这也是JavaScript 1.1和1.2为什么不符合ECMA-262规范第一版的主要原因。
ECMA-262的第二版大部分更新本质上是编辑性的。这次标准的更新是为了与ISO/IEC- 16262的严格一致,也并没有特别添加、更改和删除内容。ECMAScript实现一般不会遵守第二版。
EMCA-262第三版是该标准第一次真正的更新。它提供了对字符串处理、错误定义和数值输出的更新。同时,它还增加了正则表达式、新的控制语句、try...catch异常处理的支持,以及一些为使标准国际化而做的小改动。一般来说,它标志着ECMAScript成为一种真正的编程语言的到来。
2.何谓ECMAScript符合性
在ECMA-262中,ECMAScript符合性(conformance)有明确的定义。一个脚本语言必须满足以下四项基本原则:
q 符合的实现必须按照ECMA-262中所描述的支持所有的“类型、值、对象、属性、函数和程序语法及语义”(ECMA-262,第1页);
q 符合的实现必须支持Unicode字符标准(UCS);
q 符合的实现可以增加没有在ECMA-262中指定的“额外的类型、值、对象、属性和函数”。ECMA-262将这些增加描述为规范中未给定的新对象或对象的新属性;
q 符合的实现可以支持没有在ECMA-262中定义的“程序和正则表达式语法”(意思是可以替换或者扩展内建的正则表达式支持)。
所有的ECMAScript实现必须符合以上标准。
3.Web浏览器中的ECMAScript支持
含有JavaScript 1.1的Netscape Navigator 3.0在1996年发布。然后,JavaScript 1.1规范被作为一个新标准的草案提交给ECMA。有了JavaScript轰动性的流行,Netscape十分高兴地开始开发1.2版。但有一个问题:ECMA并未接受Netscape的草案。在Netscape Navigator 3.0发布后不久,微软就发布了IE 3.0。该版本的IE含有JScript 1.0(微软自己的JavaScript实现的名称),原本计划可以与JavaScript 1.1相提并论。然而,由于文档不全以及一些不当的重复特性,JScript 1.0 远远没有达到JavaScript 1.1的水平。
在ECMA-262第一版定稿之前,发布含有JavaScript 1.2的Netscape Navigator 4.0是在1997年,在那年晚些时候,ECMA-262标准被接受并标准化。因此,JavaScript 1.2并不和ECMAScript的第一版兼容,虽然ECMAScript应该基于JavaScript 1.1。
JScript的下一步升级是IE 4.0中加入的JScript 3.0(2.0版是随微软的IIS 3.0一起发布的,但并未包含在浏览器中)微软大力宣传JScript 3.0是世界上第一个真正符合ECMA标准的脚本语言。而那时,ECMA-262还并没有最终定稿,所以JScript 3.0也遭受了和JavaScript 1.2同样的命运——它还是没能符合最终的ECMAScript标准。
Netscape选择在Netscape Navigator 4.06中升级它的JavaScript实现。JavaScript 1.3使Netscape终于完全符合了ECMAScript第一版。Netscape加入了对Unicode标准的支持,并让所有的对象保留了在JavaScript 1.2中引入的新特性的同时实现了平台独立。
当Netscape将它的源代码作为Mozilla项目公布于众时,本来计划JavaScript 1.4将会嵌入到Netscape Navigator 5.0中。然而,一个冒进的决定——要完全从头重新设计Netscape的代码,破坏了这个工作。JavaScript 1.4仅仅作为一个Netscape Enterprise Server的服务器端脚本语言发布,以后也没有被放入浏览器中。
如今,所有的主流Web浏览器都遵守ECMA-262第三版。下面的表格列出了大部分流行Web浏览器中的ECMAScript支持:
浏 览 器
|
ECMAScript符合性
|
Netscape Navigator 2.0
|
–
|
Netscape Navigator 3.0
|
–
|
Netscape Navigator 4.0–4.05
|
–
|
Netscape Navigator 4.06–4.79
|
Edition 1
|
Netscape 6.0+ (Mozilla 0.6.0+)
|
Edition 3
|
Internet Explorer 3.0
|
–
|
Internet Explorer 4.0
|
–
|
Internet Explorer 5.0
|
Edition 1
|
Internet Explorer 5.5+
|
Edition 3
|
Opera 6.0–7.1
|
Edition 2
|
Opera 7.2+
|
Edition 3
|
Safari 1.0+/Konqueror ~2.0+
|
Edition 3
|
1.2.2 DOM
DOM(文档对象模型)是HTML和XML的应用程序接口(API)。DOM将把整个页面规划成由节点层级构成的文档。HTML或XML页面的每个部分都是一个节点的衍生物。请考虑下面的HTML页面:
这段代码可以用DOM绘制成一个节点层次图(如图1-3所示)。
图 1-3
DOM通过创建树来表示文档,从而使开发者对文档的内容和结构具有空前的控制力。用DOM API可以轻松地删除、添加和替换节点。
1.为什么DOM必不可少
自从IE 4.0和Netscape Navigator 4.0开始支持不同形式的动态HTML(DHTML),开发者首次能够在不重载网页的情况下修改它的外观和内容。这是Web技术的一大飞跃,不过也带来了巨大的问题。Netscape和微软各自开发自己的DHTML,从而结束了Web开发者只编写一个HTML页面就可以在所有浏览器中访问的时期。
业界决定必须要做点什么以保持Web的跨平台特性,他们担心如果放任Netscape和微软公司这样做,Web必将分化为两个独立的部分,每一部分只适用于特定的浏览器。因此,负责制定Web通信标准的团体W3C(World Wide Web Consortium)就开始制定DOM。
2.DOM的各个Level
DOM Level 1是W3C于1998年10月提出的。它由两个模块构成,即DOM Core和DOM HTML。前者提供了基于XML的文档的结构图,以方便访问和操作文档的任意部分;后者添加了一些HTML专用的对象和方法,从而扩展了DOM Core。
注意,DOM不是JavaScript专有的,事实上许多其他语言都实现了它。不过,Web浏览器中的DOM已经用ECMAScript实现了,现在是JavaScript语言的一个很大组成部分。
DOM Level 1只有一个目标,即规划文档的结构,DOM Level 2的目标就广泛多了。对原始DOM的扩展添加了对鼠标和用户界面事件(DHTML对此有丰富的支持)、范围、遍历(重复执行DOM文档的方法)的支持,并通过对象接口添加了对CSS(层叠样式表)的支持。由Level 1引入的原始DOM Core也加入了对XML命名空间的支持。
DOM Level 2引入几种DOM新模块,用于处理新的接口类型:
- DOM视图——描述跟踪文档的各种视图(即CSS样式化之前和CSS样式化之后的文档)的接口;
- DOM事件——描述事件的接口;
- DOM样式——描述处理基于CSS样式的接口;
- DOM遍历和范围——描述遍历和操作文档树的接口。
DOM Level 3引入了以统一的方式载入和保存文档的方法(包含在新模块DOM Load and Save中)以及验证文档(DOM Validation)的方法,从而进一步扩展了DOM。在Level 3中,DOM Core被扩展为支持所有的XML 1.0特性,包括XML Infoset、XPath和XML Base.
在学习DOM时,可能会遇到有人引用DOM Level 0。注意,根本没有DOM Level 0这个标准,它只是DOM的一个历史参考点(DOM Level 0指的是IE 4.0和Netscape Navigator 4.0中支持的原始DHTML)。
3.其他DOM
除了DOM Core和DOM HTML外,还有其他几种语言发布了自己的DOM标准。这些语言都是基于XML的,每种DOM都给对应语言添加了特有的方法和接口:
-可缩放矢量图形(SVG)1.0;
-数学标记语言(MathML)1.0;
- 同步多媒体集成语言(SMIL)。
此外,其他语言也开发了自己的DOM实现,如Mozilla的XML用户界面语言(XUL)。不过,只有上面列出的几种语言是W3C的推荐标准。
4.Web浏览器中的DOM支持
DOM在被Web浏览器开始实现之前就已经是一种标准了。IE首次尝试支持DOM是在5.0版本中,不过其实直到5.5版本才具有真正的DOM支持,IE 5.5实现了DOM Level 1。从那时起,IE就没有再引入新的DOM功能。
Netscape直到Netscape 6(Mozilla 0.6.0)才引入DOM支持。目前,Mozilla具有最好的DOM支持,实现了完整的Level 1、几乎所有的Level 2以及一部分Level 3。(Mozilla开发小组的目标是构造一个与标准100%兼容的浏览器,他们的工作得到了回报。)
Opera直到7.0版本才加入DOM支持,还有Safari也实现了大部分DOM Level 1。它们几乎都与IE 5.5处于同一水平,有些情况下,甚至超过了IE 5.5。不过,就对DOM的支持而论,所有浏览器都远远落后于Mozilla。下表列出了常用浏览器对DOM的支持。
浏 览 器
|
DOM兼容性
|
Netscape Navigator 1.0-4.x
|
-
|
Netscape 6.0+ (Mozilla 0.6.0+)
|
Level 1、Level 2、Level 3(部分)
|
IE 2.0-4.x
|
-
|
IE 5.0
|
Level 1(最小)
|
IE 5.5+
|
Level 1(几乎全部)
|
Opera 1.0-6.0
|
-
|
Opera 7.0+
|
Level 1(几乎全部)、Level 2(部分)
|
Safari 1.0+/Konqueror ~2.0+
|
Level 1
|
1.2.3 BOM
IE 3.0和Netscape Navigator 3.0提供了一种特性——BOM(浏览器对象模型),可以对浏览器窗口进行访问和操作。使用BOM,开发者可以移动窗口、改变状态栏中的文本以及执行其他与页面内容不直接相关的动作。使BOM独树一帜且又常常令人怀疑的地方在于,它只是JavaScript实现的一部分,没有任何相关的标准。
BOM主要处理浏览器窗口和框架,不过通常浏览器特定的JavaScript扩展都被看作BOM的一部分。这些扩展包括:
-弹出新的浏览器窗口;
-移动、关闭浏览器窗口以及调整窗口大小;
- 提供Web浏览器详细信息的导航对象;
- 提供装载到浏览器中页面的详细信息的定位对象;
-提供用户屏幕分辨率详细信息的屏幕对象;
- 对cookie的支持;
-IE扩展了BOM,加入了ActiveXObject类,可以通过JavaScript实例化ActiveX对象。
由于没有相关的BOM标准,每种浏览器都有自己的BOM实现。有一些事实上的标准,如具有一个窗口对象和一个导航对象,不过每种浏览器可以为这些对象或其他对象定义自己的属性和方法。本书第5章详细介绍了这些实现的不同之处。
1.3 小结
本章介绍了JavaScript这种客户端Web浏览器脚本语言。你已经了解了构成JavaScript完整实现的各个部分:
- JavaScript的核心ECMAScript描述了该语言的语法和基本对象;
-DOM描述了处理网页内容的方法和接口;
-BOM描述了与浏览器进行交互的方法和接口。
此外,本章还探讨了JavaScript的历史,使你了解到该语言的各个部分是如何发展而来的,以及历史上浏览器是如何处理各种标准的实现的。
发表评论
-
(转)TransactionSynchronizationManager理解
2008-04-09 10:54 5786http://blog.sina.com.cn/s/blog_ ... -
(转)程序语言概述
2007-09-07 16:26 1365介绍程序语言分类的,可以在总体上有个了解。 程序语言可分为5类 ... -
(转)从Coding Fan到真正的技术专家
2007-09-05 15:44 1809中国有很多小朋友,他 ... -
(转)在Java开源王国中自由翱翔
2007-09-05 15:07 1218如今的Java领域,各种新 ... -
(转)Java开发技术十年回顾与展望
2007-09-05 14:52 1420更新时间:2006-12-19 ... -
(转)关于抽象类和接口的两篇不错文章
2007-08-27 11:42 1416一.抽象类与接口的区别 转自[url] http://www ... -
(转自Ajax中国)Ajax并不神秘
2007-08-23 09:08 1489看过此文章,觉得的确是讲的非常好,此种思路清晰,讲解透彻的文章 ... -
(转)关于Java栈与堆的思考
2007-07-20 09:58 1183原文:http://blog.csdn.net/z ...
相关推荐
根据给定的信息,我们将深入分析并提取出与JavaScript面试题相关的知识点。 ### 一、单选题 #### 1. 以下哪条语句会产生运行错误: - **选项A**: `var obj = ();` - **解析**:在JavaScript中,括号`()`通常用于...
在"AngularJS高级程序设计第一章"中,我们将会深入探讨AngularJS的基础概念和核心特性,为后续章节的学习打下坚实基础。 首先,AngularJS的核心概念包括数据绑定、依赖注入和指令系统。数据绑定是AngularJS最显著的...
- **第1章:欢迎使用Silverlight 5**:介绍Silverlight 5的基本概念、功能和架构。 - **第2章:Visual Studio 2010简介**:介绍如何使用Visual Studio 2010进行Silverlight项目的创建和管理。 - **第3章:...
这个"ASP程序设计的课件及练习"资源来自中国水利水电出版社,涵盖了从第1章到第6章的ASP基础知识和实践内容。下面我们将深入探讨这些章节可能涵盖的关键知识点。 1. **第一章:ASP基础** - ASP的概念:介绍ASP是...
#### 一、课程导学(第01章) - **章节目标**:介绍Python爬虫的基本概念和发展历程。 - **主要内容**: - Python爬虫的发展背景及其重要性。 - 爬虫在实际工作中的应用案例分享。 - Python语言特点及为什么适合...
《JavaScript Bible》第六版是一本被广泛赞誉的经典教程,由资深技术作家Danny Goodman撰写,并由JavaScript的创造者Brendan Eich作序推荐。本书是学习JavaScript编程语言的理想资源,无论是对于初学者还是有经验的...
- **解析**: 报表页眉只在报表的第一页顶部打印一次。 #### 9. 索引类型 - **题目**: 对于自由表而言,不允许有重复值的索引是_______。 - A. 主索引 - B. 候选索引 - C. 普通索引 - D. 唯一索引 - **正确答案*...
根据给定的信息,“JavaScript權威指南第四版”主要聚焦于JavaScript这一重要的编程语言。尽管提供的具体内容部分并未包含实际的知识点,但我们可以根据标题、描述以及标签来推断这本书可能涵盖的关键概念和技术要点...
1. **第1章:ASP.NET入门** - ASP.NET概述:介绍ASP.NET的历史、特点以及它在Web开发中的地位。 - .NET Framework基础:解释.NET Framework的重要性,以及它如何为ASP.NET提供运行环境。 - Visual Studio IDE:...
1. **第一章:Web应用基础** - Web应用的工作原理:介绍了HTTP协议、Web服务器和浏览器之间的交互。 - ASP.NET架构:讲解了ASP.NET的运行时环境,包括ISAPI扩展和托管管道模型。 - 开发工具:探讨了Visual Studio...
#### 二、第一周知识点概览 ##### 第一天:熟悉CORBA - **CORBA的概念与历史**:了解CORBA的发展历程及其在企业级应用中的作用。 - **CORBA的基本原理**:介绍CORBA如何通过ORB(Object Request Broker)实现对象...
第1章:ASP.NET 4.0概述 在这个章节,你会了解到ASP.NET 4.0的基本概念,包括它的主要特点、改进和新特性,以及与之前的版本相比有何不同。此外,还会介绍开发环境的搭建,如Visual Studio 2010的安装和配置。 第2...
"AJAX和PHP:构建响应式Web应用程序:第5章:AJAX聊天和JSON" 这个标题表明我们正在讨论一个关于使用AJAX和PHP技术开发响应式Web应用的教程,特别关注第五章的内容,该章涉及构建一个实时的聊天功能,并深入探讨了...
- **高级教程:如何编写可重用的应用程序**:教授了如何设计可扩展且易于维护的 Django 应用程序。 - **下一步阅读建议**:推荐了一些深入学习的资源。 - **为 Django 编写第一个补丁**:指导开发者如何为 Django ...
- **编写第一个 Django 应用**:分四部分介绍了如何从零开始构建一个简单的 Web 应用程序,包括创建项目、定义模型、编写视图、设计模板等。 - **后续阅读推荐**:推荐了一些进阶教程和技术文章,帮助开发者深入学习...
- **第一个ASP页面**:通过一个简单的例子展示如何创建并运行ASP网页。 #### 第二部分:万剑诀 - **简单的HTML**:介绍HTML的基本结构和常用标签,如`<html>`、`<body>`、`<title>`等。 - **Freedom**:强调HTML...