JavaScript简介

JavaScript的基本概念

JavaScript是由布兰登·艾奇(Brendan Eich,1964年~)于1995年在网景公司(Netscape)任职时设计的一门基于浏览器的解释型语言

Javascript是由网景公司的LiveScript发展而来,它是一种原型化继承的、面向对象的、动态类型的、区分大小写的客户端脚本语言,其最初目的是为了解决服务器端语言(比如Perl)遗留的速度问题,为客户提供更流畅的浏览效果。当时服务端需要对数据进行验证,由于网络速度相当缓慢(只有28.8kbps),验证步骤浪费的时间太多。于是网景公司为自家的Navigator浏览器加入了JavaScript,提供了数据验证的基本功能。

JavaScript的历史简述

Netscape发明了JavaScript

20世纪90年代,当网上冲浪越来越流行时,人们对客户端脚本语言的需求也越来越强烈。那个时候,大部分因特网用户还仅仅通过28.8kbit/s的调制解调器连接到网络,但网页的大小和复杂性却不断增加。仅仅为了简单的表单有效性验证,就要与服务器进行多次地往返交互。设想一下,用户填完一个表单,点击提交按钮,等待了30秒的处理后,看到的却是一条消息告诉你忘记填写一个必要的字段…

当时走在技术革新最前沿的Netscape公司,决定着手开发一种客户端语言,用来处理这种简单的验证工作。

当时就职于Netscape公司的布兰登·艾奇(Brendan Eich),开始着手为即将在1995年发行的Netscape Navigator 2.0开发一个称之为LiveScript的脚本语言——该语言将同时在浏览器和服务器端中使用(它在服务器上的名字叫作LiveWire)。为了赶在发布日期前完成LiveScript的开发,Netscape与Sun公司建立了一个开发联盟,合作并及时完成了LiveScript的实现。

就在Netscape Navigator 2.0即将正式发布前,Netscape将LiveWire更名为JavaScript,目的是为了利用Java这个因特网时髦词汇。Netscape的赌注最终得到回报,JavaScript从此变成了因特网的必备组件。

JScript与JavaScript

由于JavaScript 1.0如此成功,1996年08月,Netscape随即在Netscape Navigator 3.0中又发布了1.1版。Web虽然羽翼未丰,但用户关注度却屡创新高。在这样的背景下,Netscape把自己定位为市场领袖型公司。

与此同时,微软决定向自家产品Internet Explorer浏览器投入更多的资源。Netscape Navigator 3.0发布后不久,微软就在其Internet Explorer 3中加入了名为JScript的JavaScript实现(命名为JScript是为了避开与Netscape有关的授权问题)。

微软推出其JavaScript实现意味着有了两个不同的JavaScript版本:Netscape Navigator中的JavaScript、Internet Explorer中的JScript。与C及其他编程语言不同,当时还没有标准规定JavaScript的语法和特性,两个不同版本并存的局面已经完全暴露了这个问题。随着业界担心的日益加剧,JavaScript的标准化问题被提上了议事日程。

JavaScript标准化——ECMAScript

1997年,JavaScript 1.1作为一个草案提交给欧洲计算机制造商协会(ECMA)。在ECMA的协调下,由来自Netscape、Sun、微软、Borland和其他一些对脚本编程感兴趣的公司的程序员组成的TC39工作组,经过数月的努力完成了统一标准:ECMA-262,该标准定义了名为ECMAScript(发音为“ek-ma-script”)的全新的脚本语言。

第二年,国际标准化组织及国际电工委员会(ISO/IEC)也采纳 ECMAScript作为标准(ISO/IEC-16262)。自此以后,浏览器开发商就开始致力于将ECMAScript作为各自JavaScript的实现基础,并在不同程度上取得了成功。

尽管ECMAScript是一个重要的标准,但它并不是JavaScript的唯一部分,当然,也不是唯一被标准化的部分。实际上,一个完整的JavaScript实现是由以下3个不同部分组成的:

  • 核心(ECMAScript)——JavaScript的核心ECMAScript描述了该语言的语法和基本对象。
  • 文档对象模型(DOM)——DOM描述了处理网页内容的方法和接口。
  • 浏览器对象模型(BOM)——BOM描述了与浏览器进行交互的方法和接口。

JavaScript的版本历史

ECMAscript的进展情况

通过上述内容我们了解到——ECMAScript是形成JavaScript语言基础的脚本语言,是由Ecma国际标准组织以ECMA-262规范的形式进行标准化的。到目前为止,ECMAScript经历了多个版本的制定和发布,下表整理归纳了ECMAScript的工作进展:

版本 发布时间 文档链接 与前版本的差异
ECMAScript 1 1997年06月 PDF 首版
ECMAScript 2 1998年08月 PDF 格式修正,以使得其形式与ISO/IEC16262国际标准一致。
ECMAScript 3 1999年12月 PDF 强大的正则表达式,更好的词法作用域链处理,新的控制指令,异常处理,错误定义更加明确,数据输出的格式化,以及其它改变。
ECMAScript 4 放弃 由于关于语言的复杂性出现分歧,第4版本被放弃,其中部分成为了第5版以及Harmony的基础。
ECMAScript 5 2009年12月 PDF 新增“严格模式(strict mode)”,一个子集用作提供更彻底的错误检查,以避免结构出错。澄清了许多第3版本的模糊规范,and accommodates behaviour of real-world implementations that differed consistently from that specification。增加了部分新功能,如getters、setters,并支持JSON等。
ECMAScript 5.1 2011年06月 PDF ECMAScript 5.1,最新发布的规范文档。该版本完全符合ISO/IEC 16262:2011国际标准第三版。它包含了ES5的勘误修复,并没有添加新的特性。
ECMAScript 6 草案制定中... 草案 代号“Harmony”,增加了多个新的概念和语言特性。ECMAScript Harmony将会以“ECMAScript 6”发布。

除了上述ECMAScript的常规版本之外,2004年6月Ecma组织还发表了ECMA-357标准,它是ECMAScript的一个扩延,也被称为E4X(ECMAScript for XML)。E4X为JavaScript加入了原生XML的支持。它通过提供以表单的方式访问XML文档,这使ECMAScript程序员感觉很自然。它的目标是提供一个可替代DOM接口的、更简明的语法来访问XML文档。

Mozilla与JavaScript版本

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

版本 发布日期 实现 基于
JavaScript 1.0 1996年03月 Netscape Navigator 2
JavaScript 1.1 1996年08月 Netscape Navigator 3
JavaScript 1.2 1997年06月 Netscape Navigator 4
JavaScript 1.3 1998年10月 Netscape Navigator 4.06 ECMAScript第一版 (1997年6月) / ECMAScript第二版 (1998年6月)
JavaScript 1.4 Netscape Server Only
JavaScript 1.5 2000年11月 Firefox 1 ECMAScript第三版 (1999年12月)
JavaScript 1.6 2005年11月 Firefox 1.5 1.5 + Array extras + Array and String generics + E4X
JavaScript 1.7 2006年10月 Firefox 2 1.6 + Pythonic generators + Iterators + let
JavaScript 1.8 2008年06月 Firefox 3 1.7 + Generator expressions + Expression closures
JavaScript 1.8.1 2009年06月 Firefox 3.5 1.8 + Native JSON support + Minor Updates
JavaScript 1.8.2 2009年06月 Firefox 3.6 1.8.1 + Minor updates
JavaScript 1.8.5 2010年07月 Firefox 4 1.8.1 + ECMAScript 5 Compliance
JavaScript 2.0 工作中... ECMAScript Harmony(草案制定中...)

注意,只有Netscape/Mozilla浏览器才遵循这种编号模式,IE则采用另外一种版本命名的模式。其他浏览器在提及对JavaScript的支持情况时,一般都以ECMAScript兼容性对DOM的支持情况为准。

特别说明:

  1. 当Netscape将它的源代码作为Mozilla项目公布于众时,本来计划JavaScript 1.4将会嵌入到Netscape Navigator 5.0 中。然而,一个冒进的决定——要完全从头重新设计Netscape的代码,破坏了这个工作。JavaScript 1.4仅仅作为一个Netscape Enterprise Server 的服务器端脚本语言发布,以后也没有被放入浏览器中。
  2. 如今,所有的主流Web浏览器都遵守ECMA-262 第三版,即实现的是JavaScript 1.5版,JavaScript 1.6-1.9只是ECMAScript升级至JavaScript 2.0的临时代号。

Internet Explorer与JScript版本

微软在Netscape发布JavaScrpt 1.1版本后不久,就在自家的Internet Explorer 3.0中实现了JavaScript的克隆版——JScript(这样命名是为了避免与Netscape潜在的许可纠纷)。在发展初期,为了取得竞争上的优势,微软和Netscape在各自的浏览器上进行着不同的“脚本试验”,其直接后果就是开发人员需要书写两套不同的脚本代码来实现浏览器兼容。为了杜绝这种局面,ECMAScript出现了。之后,微软和Netscape就开始致力于将ECMAScript作为各自脚本的实现基础。

换句话说,JScript只是微软对JavaScript的叫法,他们的本质其实是一样的,都是基于对ECMAScript的实现。

自ECMAScript问世以来,各大浏览器厂商就不断地完善着各自的浏览器以及对ECMAScript的实现,下表列出了微软JScript这些年来的进展情况:

版本 发布日期 实现 基于
JScript 1.0 1996年08月 Internet Explorer 3.0 Netscape JavaScript
JScript 2.0 1997年01月 Windows IIS 3.0 Netscape JavaScript
JScript 3.0 1997年10月 Internet Explorer 4.0 ECMA-262 1st edition
JScript 4.0 Visual Studio 6.0 (Visual InterDev的一部分) ECMA-262 1st edition
JScript 5.0 1999年05月 Internet Explorer 5.0 ECMA-262 2nd edition
JScript 5.1 Internet Explorer 5.01 ECMA-262 2nd edition
JScript 5.5 2000年07月 Internet Explorer 5.5 & Windows CE 4.2 ECMA-262 3rd edition
JScript 5.6 2001年10月 Internet Explorer 6.0 & Windows CE 5.0 ECMA-262 3rd edition
JScript 5.7 2006年11月 Internet Explorer 7.0 ECMA-262 3rd edition + ECMA-327 (ES-CP)
JScript 5.8 2009年05月 Internet Explorer 8.0 ECMA-262 3rd edition + ECMA-327 (ES-CP) + JSON
JScript 9.0 2011年03月 Internet Explorer 9.0 ECMA-262 5th edition

特别说明:

  1. 在IE浏览器中可使用ScriptEngineMajorVersion()方法获取JScript的版本号(仅限整数版本,1.0版本不支持该方法)。
  2. 自2002年01月以来,微软就在其.NET平台中添加了对JScript的支持,官方名称为JScript.NET。JScript.NET属于编译型语言,需要依赖于.NET的通用语言运行库方可运行。JScript.NET很少被开发者所关注,不过你还是可以使用JScript.NET来编写ASP.NET应用程序,点击这里了解更多。

有问必答

  1. 大家常说的“JS”跟JavaScript有什么关系吗?

    “JS”是开发者们对JavaScript的一种简称,跟PS(Photoshop)、DW(Dreamweaver)、VS(Visual Studio)属于同一性质。

  2. JavaScript与Java有何关系?

    Java是由Sun公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。而JavaScript则是Netscape公司与Sun公司合作开发的一门脚本语言,其最开始的名字是LiveScript,后来选择JavaScript作为正式名称发布。其目的是为了利用Java这个因特网时髦词汇,让它听起来有系出名门的感觉。

    换句话说,Java与JavaScript的关系就好比“雷锋”与“雷峰塔”。

  3. JavaScript与JScript是一样的吗?

    JavaScript是1995年由Netscape公司研发的一门基于浏览器的脚本语言,而JScript则是微软于1996年在Internet Explorer 3.0中加入JavaScript实现的一种叫法(为的是避免与Netscape潜在的许可纠纷)。在早期,JavaScript与JScript着实存在着大量的不一致,Web开发人员往往需要书写两套不同的脚本代码来实现兼容。不过自1997年由欧洲计算机制造商协会(ECMA)推出ECMAScript标准后,微软和Netscape都将ECMAScript作为其浏览器脚本实现的基础。自此,JavaScript和JScript有了一个更为标准的统一称谓——ECMAScript。

  4. Netscape浏览器现在去哪儿了?

    Netscape的中文名:网景,是一个自1994年开始的品牌,是网景通信公司(Netscape Communications Corporation)的常用简称。Netscape以其生产的同名网页浏览器Netscape Navigator而闻名。不过伴随着Windows 98系统的发售以及微软与ISP以及主机厂商的合作、可以加入IE专属标签的FrontPage软件的普及、IE对CSS的抢先支持、以及网景公司的错误决策等多方面因素,网景慢慢走向衰落。

    1998年01月,网景与微软IE浏览器的竞争失利之后,为了挽回市场,网景通信公司公布旗下所有软件以后的版本皆为免费。

    1998年02月23日,网景在公司内部成立了非正式的Mozilla(谋智)组织。该组织独立运作来负责Mozilla Application Suite的研发(一套自由的、跨平台的因特网应用套装软件)。

    1998年11月24日,美国在线(American Online,简称AOL)以42亿美元、免税换股的方式收购了网景。

    2003年05月,著名的AOL诉微软垄断案达成和解。作为让步,AOL同意解散网景并中止其下业务。

    2003年07月15日,AOL正式解散网景公司。当天,Mozilla组织正式注册成为了非牟利机构,并正式更名为Mozilla基金会(Mozilla Foundation,简称MF或MoFo)。

    2004年11月9日,Mozilla基金会正式发布了Mozilla Firefox 1.0(网页浏览器)。Firefox(对Mozilla Firefox的缩写,简称FF)最初派生于Mozilla Application Suite所分支出的实验性项目,在2002年09月以Phoenix为名发布测试用可执行文件而正式问世。2003年04月,由于Phoenix商标纠纷问题Mozilla将Phoenix更名为Firebird。后面由于跟Firebird数据库重名,迫于压力最终再次更名为Mozilla Firefox。

    2005年08月03日,Mozilla基金成立了完全所有的应税牟利子公司Mozilla公司。其公司初始运营资金来自Mozilla基金,其成立目的在于推广Firefox和Thunderbird。

    2007年12月28日,AOL在博客表示将停止网景浏览器的开发,并于2008年03月01日停止安全更新和所有的技术支持,并建议用户转移使用Mozilla Firefox浏览器。从此,Netscape正式退出历史舞台。

  5. Netscape,Mozilla和Firefox是什么关系?

    Netscape是一家中文名为网景的通信公司,以其开发的同名网页浏览器Netscape Navigator而闻名一时。

    后来在与微软IE浏览器的竞争过程中不断失利,于是在公司内部成立了Mozilla组织。

    之后Netscape公司被解散,而Mozilla组织则正式注册成为Mozilla基金会。

    最后Mozilla基金会推出了Mozilla Firefox网页浏览器(简称Firefox),并成立了Mozilla公司,而Netscape公司以及Netscape Navigator浏览器则退出了历史舞台。

  6. 解释型语言与编译型语言有什么不同?

    编译型语言(如:C、C++、Java)必须将源代码编译(或转换)为机器语言(二进制机器代码)后方可执行,而解释型语言(如:JavaScript、Python、Ruby)则由解析器边解释,边执行。对于JavaScript而言,它属于解释型语言,浏览器(解析器)会直接执行所遇到的每一行JavaScript代码。

    解释型语言有一个主要优点:编写或更改代码都非常简单。更改JavaScript代码就像更改一个典型的HTML文档一样容易,而且只要在浏览器里再次加载该文档就可以使更改生效。解释型语言也有缺点——其运行速度受到局限,它们并不适合于较为复杂的工作。

参考内容