1,JavaScript前世今生
javascript历史
大概在1992年,一家称作nombas的公司开始开发一种叫做c–(c-minus-minus,简称cmm)的嵌入式脚本语言。 cmm背后的理念很简单:一个足够强大可以替代宏操作(macro)的脚本语言,同时保持与c(和c++)中够的相似性,以便开发人员能很快学会。 这个脚本语言捆绑在一个叫做cenvi的共享软件产品中,它首次向开发人员展示了这种语言的威力。 nombas最终把cmm的名字改成了scripease。原因是后面的部分(mm)听起来过于“消极”,同时字母c“令人害怕”。 现在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中的javascript、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个不同部分组成的
核心(ecmascript)——javascript的核心ecmascript描述了该语言的语法和基本对象
文档对象模型(dom)——dom描述了处理网页内容的方法和接口
浏览器对象模型(bom)——bom描述了与浏览器进行交互的方法和接口
ecmascript、dom、bom将是我们之后课程的主要内容。
javascript与java
尽管名字中有java,但是javascript和java几乎没有什么共同点。java是一种全功能的编程语言,是由sun公司开发和推广的。java是c和c++编程语言之后的又一种主流语言,程序员可以使用它创建完整的应用程序和控制消费电子设备。与其他语言不同,java宣称具有跨平台兼容性;也就是说,程序员应该能够编写出可以在所有种类的机器上运行的java程序,无论机器运行的是windows、mac os x还是任何风格的unix。但实际上,java不总是能够实现这个梦想,因为sun和微软公司在这种语言的发展方向方面有很大的分歧。微软公司首先试图以自己的方式将java集成到windows中(sun认为,这种方式使java在windows上以一种方式工作,而在其他机器上以另一种方式工作,从而破坏了java的跨平台兼容性);随后,微软公司从windows中完全去除了sun的java,而创建了自己的类java语言:c#。经过两公司之间的一轮诉讼之后,sun占据了上风,现在可以在windows(或linux)上安装sun的最新java版本(http://www.java.com/getjava/)。mac os x操作系统在安装时会附带java。
javascript可以做什么
用javascript可以做许多事情,使网页更具交互性,给站点的用户提供更好、更令人兴奋的体验。javascript使你可以创建活跃的用户界面,当用户在页面间导航时向他们提供反馈。例如,你可能在一些站点上见过在鼠标指针停留时突出显示的按钮。这是用javascript实现的,使用了一种称为翻转器(rollover)的技术 可以使用javascript确保用户在表单中输入有效的信息,这可以节省你的业务时间和开支。如果表单需要进行计算,那么可以在用户机器上的javascript中完成,而不需要任何服务器端处理。你应该知道一种区分程序的方式:在用户机器上运行的程序称为客户端(client-side)程序;在服务器上运行的程序(包括后面要讨论的cgi)称为服务器端(server-side)程序。 可以使用javascript根据用户的操作即时创建定制的html页面。假设你正在运行一个旅行指南站点,用户点击夏威夷作为旅游目的地。你可以在一个新窗口中显示最新的夏威夷旅游指南。javascript可以控制浏览器,所以你可以打开新窗口、显示警告框以及在浏览器窗口的状态栏中显示定制的消息。javascript有一套日期和时间特性,可以生成时钟、日历和时间戳文档。 javascript还可以处理表单、设置cookie、即时构建html页面以及创建基于web的应用程序。
javascript不能做什么
javascript是一种客户端(client-side)语言;也就是说,设计它的目的是在用户的机器上执行任务,而不是在服务器上。因此,javascript有一些固有的限制,这些限制主要出于安全原因:
1.javascript不允许读写客户机器上的文件。这是有好处的,因为你肯定不希望网页能够读取自己硬盘上的文件,或者能够将病毒写入硬盘,或者能够操作你计算机上的文件。唯一的例外是,javascript可以写到浏览器的cookie文件,但是也有一些限制
2.javascript不允许写服务器机器上的文件。尽管写服务器上的文件在许多方面是很方便的(比如存储页面点击数或用户填写的表单数据),但是javascript不允许这么做。相反,需要用服务器上的一个程序处理和存储这些数据。这个程序可以是用perl或php等语言编写的cgi或java程序。
3.javascript不能关闭不是由它自己打开的窗口。这是为了避免一个站点关闭其他任何站点的窗口,从而独占浏览器。
4.javascript不能从来自另一个服务器的已经打开的网页中读取信息。换句话说,网页不能读取已经打开的其他窗口中的信息,因此无法探察访问这个站点的冲浪者还在访问哪些其他站点。
hello,javascriptworld!
我们的第一个脚本:最经典的helloworld程序!
<script type="text/javascript"> document.write("<h2>hello,javascriptworld!</h2>"); </script>
- 1
- 2
- 3