首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

1.4  为JavaScript正名

至2005年,JavaScript就已经诞生十年了。然而十年之后,这门语言的发明者Brendan Eich还在向这个世界解释“JavaScript不是Java,也不是脚本化的Java(Java Scription)”。

这实在是计算机语言史上最罕见的一件事了。因为如今几乎所有的Web页面中都同时包含了JavaScript与HTML,而后者从一开始就被人们接受,前者却用了十年都未能向开发人员说清楚“自已是什么”。

Brendan Eich在这份名为“JavaScript这十年(JavaScript at Ten Years)”的演讲稿中,重述了这门语言的早期历史:Brendan Eich自1995年4月受聘于网景公司,开始实现一种名为“魔卡(Mocha)”——JavaScript最早的开发代号或名称——的语言;仅两个月之后,为了迎合Netscape的Live战略而更名为LiveScript;到了1995年末,又为了迎合市场对Java语言的热情,正式地、也是遗憾地更名为JavaScript,并随网景浏览器推出。

Brendan在这篇演讲稿最末一行写道:“不要让营销决定语言名称(Don't let Marketing name your language)”。一门被误会了十年的语言的名字之争,是不是就此结束了呢?

仍然不是。因为这十年来,JavaScript的名字已经越来越乱,更多市场的因素困扰着这门语言——好像“借用Java之名”已经成了扔不掉的黑锅。

1.4.1  JavaScript

我们先说正式的、标准的名词:JavaScript。它实际是指两个东西:

n        一种语言的统称。该语言由Brendan Eich发明,最早用于Netscape浏览器。

n        上述语言的一种规范化的实现。在JavaScript 1.3之前,网景公司将他们在Netscape浏览器上的该语言规范的具体实现直接称为JavaScript,并一度以“Client-Side JavaScript”与“Server-Side JavaScript”区分该语言在浏览器NN(Netscape Navigator)与NWS(Netscape Web Server)上的实现——但后来他们改变了这个做法。

1.4.2  Core JavaScript

Core JavaScript这个名词早在1996年(或更早之前)就被定义过,但它直到1998年10月由网景公司发布JavaScript 1.3时才被正式提出来。准确地说,它是指由网景公司和后来的开源组织Mozilla,基于Brendan Eich最初版本的JavaScript引擎而发展出来的脚本引擎。是JavaScript规范的一个主要的实现者、继承者和发展者。

Core JavaScript的定义如图1-6所示。

图1-6  官方手册中有关Core JavaScript的概念说明

在JavaScript 1.3发布时,Netscape意识到他们不能仅仅以Client/Server来区分JavaScript——因为市面已经出现了很多种JavaScript。于是他们做了一些小小的改变:在发布手册时,分别发布“Core JavaScript Guide”和“Client-Side JavaScript Guide”。前者是指语言定义与语法规范,后者则是该语言的一种应用环境与应用方法。

所以事实上,自1.3版本开始,Core JavaScript 1.x与JavaScript 1.x是等义的——换言之,我们现在常说的JavaScript 1.x,就是指Core JavaScript,而并不包括Client-Side JavaScript。不过,源于一些历史的因素,在Core JavaScript中会有一部分关于“LiveConnect技术”的叙述及规范。这在其他(所有的)JavaScript规范与实现中均是不具备的。

然而不幸的是,Apple公司有一个基于KJS实现的JavaScript引擎,名为JavaScriptCore,属于WebKit项目的一个组成部分——WebKit项目所实现的产品就是著名的开源跨平台浏览器Safari。所以在了解Core JavaScript同时,还需强调它与JavaScriptCore的不同。

1.4.3  SpiderMonkey JavaScript

Brendan Eich编写的JavaScript引擎最后由Mozilla贡献给了开源界,“SpiderMonkey”便是这个产品开发中的、开源项目的名称(code-name,项目代码名)。为了与我们通常讲述的JavaScript语言区分开来,我们使用SpiderMonkey来特指上述由Netscape实现的、Mozilla和开源社区维护的引擎及其规范。目前SpiderMonkey JavaScript已经发布了1.7版本的项目代码。

在本书此后的描述中,凡称及SpiderMonkey JavaScript,将是特指于此;凡称及JavaScript,将是泛指JavaScript这一种语言的实现。

1.4.4  ECMAScript

JavaScript的语言规范由网景公司提交给ECMA(European Computer Manufacturing Association,欧洲计算机制造协会)去审定,并在1997年6月发布了名为ECMAScript Edition 1的规范,或者称为ECMA-262。四个月后,微软在IE 4.0中发布了JScript 3.0,宣称成为第一个遵循ECMA规范来实现的JavaScript脚本引擎。

而因为计划改写整个浏览器引擎的缘故,网景公司晚了整整一年才推出“完全遵循ECMA规范”的JavaScript 1.3。请注意到这样一个问题:网景公司首先开发了JavaScript并提交ECMA标准化,但在市场的印象中,网景公司的Core JavaScript 1.3比微软的JScript 3.0“晚了一年”实现ECMA所定义的JavaScript规范。

这直接导致了一个恶果:JScript成为JavaScript语言的事实标准。

在本书此后的描述中,我们将基于ECMAScript Edition 3的规范来讲述JavaScript。凡未特别指明的叙述中,所谓JavaScript即是指“一种符合ECMAScript Edition 3规范的JavaScript实现”。

1.4.5  JScript

微软于1996年在IE中实现了一个与网景浏览器类似的脚本引擎,微软把它叫做JScript以示区别,结果JScript这个名字一直用到现在。

直到JScript 3.0之后,JavaScript语言的局面才显得明朗起来,如图1-7所示。

图1-7  JScript与JavaScript各版本间的关系

然而由于JScript成为JavaScript语言的事实标准,再有Internet Explorer浏览器几乎占尽市场(如果我们现在不是在讨论JavaScript,你也可以把这个因果颠倒过来),因此在1999年之后,Web页面上出现的脚本代码基本上都是基于JScript开发的,而Core JavaScript 1.x却变成了“(事实上的)被兼容者”。

直到2005年前后,源于W3C、ECMA对网页内容与脚本语言标准化的推动,以及Mozilla Firefox成功地返回浏览器市场,Web开发人员开始注重所编写的脚本代码是否基于JavaScript的——亦即是ECMAScript的标准规范,这成为了新一轮语言之争的起点。

1.4.6  总述

JavaScript这个名词的多种含义如表1-2所示。

表1-2  名词“JavaScript”的多种含义

含义

详述

JavaScipt脚本语言

一种语言的统称,由ECMAScript 262规范。概含Core JavaScript、Jscript、ActionScript等,而非特指其一

浏览器JavaScript

包括DOM、BOM模型等在内的对象体系,但不确指具体脚本环境。是目前JavaScript最为广泛的应用环境。(在Netscape/Mozilla系列中的浏览器JavaScript,)也被称为Cliet-Side JavaScript

Core JavaScript

也称SpiderMonkey JavaScript,主要指Netscape/Mozilla系列的浏览器环境中的JavaScript。是该语言的主要规范之一

JScript

仅指Internet Explorer系列的浏览器环境中的JavaScript,是使用最广泛的一种JavaScript脚本语言实现和该语言主要规范之一

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论