技术开发 频道

JavaScript核心技术

JavaScript初探

    JavaScript是一种广泛使用的编程语言;它也是被误解最多的一种语言。近几年,它得到了飞速发展,大多数网站都以某种形式使用它。它基于构件的能力简化了那些日益复杂的程序库的创建工作。这些程序库在Web页面中所提供的效果,在过去大都需要安装一个外部应用程序才能实现。它也可以和服务器端应用程序紧密集成在一起,而这些服务器端应用程序往往使用各种各样语言开发并与多种数据库接口。正因为这些原因,JavaScript往往被视作一种轻量级的、不复杂的、不像一种“真正的编程语言”的编程语言。

    在某些方面,JavaScript太容易使用了。对于它的批评者来说,它规范性久缺;它的面向对象的能力不是真正的面向对象(OO);它存在于一个简化环境之中,只是功能的一个子集;它不安全;它是宽松类型(loosely typed)的;它不能编译成字节或位。我想起在几年前阅读过的一个JavaScript的介绍,告诫我们不要被JavaScript的名字所迷惑:JavaScript和Java没有什么关系。毕竟,Java很难学。

    那么,实际情况又怎样呢?JavaScript到底是一种有趣的、轻量级的、有用但却不被认真对待的小脚本语言呢?还是一种可信任的、可用来实现网站的最重要功能的、强大的编程语言呢?JavaScript的真实情况是:它是将两种语言合二为一的语言;也正是这一真实情况令人混淆。

第一种语言是内置在Web浏览器和其他应用程序中的、用户友好的、易于使用的脚本语言,它能提供表单验证之类的功能,还有下拉菜单、数据更新时的颜色渐变和即席编辑页面之类的、很酷的新玩意。因为它实现于一个特定的环境中,通常是一个带有一些表单的Web 浏览器中,这同时也是一个受保护的环境。

JavaScript不需要具备管理文件、内存或很多其他编程语言的基础功能,这使得JavaScript更加精益,更加简单。无论你是否有JS的经历,是否受过JS训练,甚至不论你以前是否有过编程经验,都可以开始JS的编程。

而第二种语言是一种成熟的、功能完备的、限制严格的、基于对象的语言。它确实需要你对它有更深一层的理解。如果使用得当,在只对服务器端的应用做一点点修改甚至是不修改的情况下它就能帮助Web应用扩展规模(增加其用户数)。它能够简化网站的开发工作,同时又提高网站的成熟度,使一个好的站点在其访问者面前表现得更好。

如果使用不当,JavaScript也会产生站点的安全漏洞,尤其是在与其他功能(比如Web服务或数据库表单)组合使用的时候。它还会使页面变得无法使用、不可读和可访问性降低。

在本书中,将向你介绍上面所描述过的两种语言:有趣的脚本语言和强大的面向对象的编程语言。更重要的是,本书将向你展示如何正确地使用JavaScript。

1.1 规范和实现相互交织的历史 

    学习一种编程语言并不需要学习它的历史,但学习JavaScript却例外,因为它的历史反映在今天的Web页面中。 

    JavaScript是由Netscape公司发明的,最初开发它是为了进行LiveConnect服务器端的开发。Netscape当时想要一种能实现与服务器端构件接口的脚本语言,于是就创造了这一脚本语言,并起名叫“LiveScript”。后来,在和SUN(Java语言的所有者)合作之后,Netscape的工程师将LiveScript改名为JavaScript,尽管它过去和现在都与Java没有关系。著名的JavaScript权威Steven Champeon这样写道: 

    让我们回到1995年初。Netscape刚刚聘用了从MicroUnity Systems Engineering出来的Brendan Eich,让他负责设计和实现一种新语言。分配给他的任务是让新加入到Navigator中的Java支持能够更方便地被非Java程序员的访问,Eich最终断定:宽松类型的脚本语言才适合这样的环境;也就是说,读者(也就是数千的Web设计师和开发人员)既不需要使用字节码编译器,也不需要具备面向对象的软件设计知识,就能够把页面元素(比如表单、框架或图片)结合在一起。 

    为了反映语言的动态本质,他所创造的语言命名为“LiveScript”。但是没多久(在Navigator 2.0 beta开发结束之前),它就被更名为JavaScript。
 
    一个市场驱动的、并使Web设计师们困扰了好几年的错误就这样出炉了,他们在邮件列表和Usenet上不断地把这两种语言弄混。1995年12月4号,Netscape和Sun联合宣布了这一新语言的诞生,并称其是HTML和Java二者的补充。 

    (摘自《JavaScript: How Did We Get Here?》,O’Reilly Network,2001年4月)。 



    为了不在技术上落后,Microsoft通过发布IE浏览器和它自己的脚本语言VBScript(源自于微软的流行产品Visual Basic)来反击Netscape的进攻。后来,微软也发布了自己的类JavaScript语言版本:JScript。 

    这场浏览器及语言上的竞争冲击到很多公司对JavaScript的早期接受,尤其是最难以克服的挑战是:对于日益增长的页面,如何维护其跨浏览器的兼容性,更别提在提及名字的时候会造成的那种混淆了。 

    为了避开兼容性问题,Netscape在1996年将JavaScript的规范提交给国际组织欧洲计算机制造商协会(European Computer Manufacturer’s Association,ECMA),并将其作为一个标准化的成果来重新发布。来自Sun、Microsoft、Netscape以及其他对JavaScript进行了投资的公司的工程师应邀参与了这一过程,其结果就是在1997年6月发布了ECMAScript规范的第1个版本:ECMA-262。从那时起,大多数公司都支持一个公认的JavaScript(或者说JScript 或ECMAScript)版本,至少是支持ECMA-262。 


    你可以从http://www.ecma-international. org/ publications/ standards/Ecma-262.htm下载ECMA-262的PDF文件。它不是一本让人兴奋的读物,但却是一本很适合放在身边的参考书。 

    严格地说,ECMA-262的第2个版本只是一个维护版本。第3版,也就是当前的版本发布于1999年12月。 

    然而,如果随着ECMA-262的通过,这一混淆就结束了的话,那就不是JavaScript了。使Web发生混乱的是关于新版本的ECMAScript(即ECMA-357)的讨论。然而,ECMA-357不是ECMAScript的新版本;它是一个叫做E4X的扩展。这一扩展的目的就是为ECMA-262增加原生XML能力。ECMA-357发表于2004年,而现在JavaScript 1.6已经部分实现了E4X。 

    重要的是要记住,有很多老版本的脚本语言至今仍然还在使用。发现老的JScript或者最早版本的JavaScript并不稀奇。为了澄清脚本语言的各种版本及其相互关系,表1-1给出了JavaScript、Jscript和ECMAScript版本之间的大致关系,还指出了当前流行的Web浏览器支持它们的哪个版本。 

    当你访问一个Web页面并想知道其如何实现某个特性时,你通常可以根据它们如何声明脚本块来断定它们使用了什么版本的JavaScript。另外,这些老语言的一些部分还在影响JS的更现代的版本。在本章的后面,我们将更近距离地考察这些脚本块,我们还将看到老浏览器的影响贯穿本书,但是,重要的是要知道老版本的JavaScript及其变种依然影响着今天的应用。 


    贯穿本书的始终,我都会交替使用JavaScript和JS这两种写法。另外,除非特别注明,本书中的例子都基于ECMA-262和JavaScript 1.5/1.6。

0
相关文章