JavaScript
一,概述
JavaScript是最初于1995年由网景通讯公司(Netscape)的Brendan Eich在Navigator 2.0产品上设计并实现的一种面向对象的脚本语言。目前已经成为Web上最广泛最成功的编程语言之一。
起初许多专业语言垢病它的业余性,因为JS的目标用户是网页设计师等非专业编程人士。而Ajax的出现使得JS再登高峰,出现了众多增强JS性能的框架和类库,而且已经不局限于浏览器客户端而向服务器端JS平台深入。
现在的JavaScript并不简单。实际上尽管JavaScript是作为一种给非程序员提供的脚本语言而不是给程序员提供的程序设计语言来推广和宣传的,但是JavaScript是一门具有非常丰富特性的程序设计语言,和其他所有的语言一样复杂或者更复杂,你需要对JavaScript有扎实的理解才能用JavaScript执行比较复杂的任务。
二,JavaScript版本历史
客户端脚本语言的先驱是约1992年Nombas公司开发的Cenvi的可以嵌入网页的版本,它使用ScriptEase(C–,C-minus-minus,Cmm,C减减,ScriptEase)嵌入式脚本语言。Cmm是设计以替代宏操作(macro)的C的脚本版。
JavaScript是由网景通讯公司(Netscape)的Brendan Eich最初于1995在Navigator 2.0产品上设计并实现的,开发名为Mocha, 原名LiveScript, 最后改名为JavaScript。
版本 |
发布日期 |
说明 |
实现产品 |
1.0 |
1996年3月 |
原始版本,基本废弃。 |
Navigator2.0 IE3.0早期版本(JScript 1.0) |
1.1 |
1996年8月 |
引入真正的Array对象,消除了大量错误。 |
Navigator3.0 IE3.0后期版本(JScript 2.0) |
1.2 |
1997年6月 |
引入switch语句、正则表达式和大量新特性,基本上符合ECMAv1。 |
Navigator4.0-4.05 |
1.3 |
1998年10月 |
符合ECMA-262 V1 修正了不兼容性, 标准化了JavaScript1.1的基本特性, 并添加了一些新特性。 没有标准化switch语句和正则表达式。 ECMA-262 V2是v1的维护版本,只添加了说明。 |
Navigator4.06-4.7x IE4.0(JScript 3.0) |
1.4 |
Netscape Server服务器产品 |
||
1.5 |
2000年11月 |
引入了异常处理,符合ECMA-262 V3 标准化了switch语句、异常处理和正则表达式。 |
Navigator6.0 Firefox1.0 IE5.5/6/7/8 (JScript 5.5/ 5.6/5.7/6) Opera6.0/7.0/8.0/9.0 |
1.6 |
2005年11月 |
1.5 + Array extras + Array and String generics + E4X |
Firefox1.5 Safari3.0/3.1 |
1.7 |
2006年10月 |
1.6 + Pythonic generators + Iterators + let |
Firefox2.0 Safari3.2/4.0 Chrome1.0 |
1.8 |
2008年6月 |
1.7 + Generator expressions + Expression closures |
Firefox3.0 |
1.8.1 |
1.8 + Minor Updates |
Firefox3.5 |
|
1.9 |
1.8.1 + ECMAScript 5 Compliance |
Firefox4 |
|
1.9.1 |
多线程编程 |
三,JavaScript特点
JavaScript常用于编程访问对象,主要用于客户端,一般集成在Web浏览器组件中,可用来增强用户界面和动态网站,符合ECMAScript标准,是一种动态的,弱类型,基于原型的拥有一级函数的语言。
1,支持命令式(imperative)和结构化编程风格:支持C语言中所有结构化编程语句(if statements, while loops, switch statements),JS从1.7版本开始突破原先的函数级生存范围而支持C风格的模块级生存范围(let指令),JS和C不同之一是语句后面的分号可以省略
2,动态
dynamic typing:动态类型定义
object based:几乎是完全基于对象。
run-time evaluation:运行时赋值。使用eval函数在运行时中执行字符串语句。
3,支持函数:一级函数,函数即是对象。
4,基于原型
使用prototypes来实现继承,模拟和部份实现了C中的class类的作用。
使用函数functions来作为对象构建器constructors,”new+function”可以创建新对象,使用this可调用相对应绑定的对象,构建器的prototype(原型)属性决定了新对象的内部prototype属性。JS的内置构建器如数组,也有可修改的prototype属性。
functions as methods:使用函数来作为方法:JS中的函数定义和方法定义无区别,只有调用时才有区别,当一个函数被当作一个对象或者方法来调用时,在调用中可使用this来绑定该函数。
5,杂项
运行时依赖于浏览器
函数可变性:可以把不定数目的参数传递给函数
数组或对象的定义采用JSON语法形式
JS支持类似Perl的正则表达式
6,软件厂商特定的扩展支持
JS语言由Mozilla官方维护并定期增加新功能。而其它厂家的JS引擎并非支持完全的新功能。
property getter和setter函数 (WebKit, Opera, ActionScript,Rhino支持)
有条件的catch子句
从Python借鉴而来的iterator protocol迭代协议,shallow generators/coroutines,array comprehensions and generator expressions
使用let指令定义模块范围内的生命周期。
数组和对象的召回destructuring (limited form of pattern matching)
简明函数表达式 (function(args) expr)
E4X(ECMAScript for XML)
四,相关的语言
符合ECMA 262标准的称为ECMAScript语言,和厂家无关。
Objective-J是基于Objective-C的JavaScript的超集,相对JS增加了传统的继承概念和Smalltalk/Objective-C风格的动态调度和可选的伪静态类型。
JSON(JavaScript Object Notation)是一种被定义为JS子集的通用的数据交换格式。
JavaScript也被认为是一种如同Scheme和OCaml一样的函数编程式语言。因为JS支持闭包(closures)和高阶函数(higher-order functions).
Mozilla浏览器目前支持LiveConnect,它通过NPAPI(Netscape Plugin Application Programming Interface NPAPI)允许JavaScript和Java在web上互相通信。不过该功能会逐渐废弃,未来将使用Java 1.6+ 插件。
1,Java
JavaScript是受了Java,Lisp等多种语言的启发而开始设计的,而且设计的目的之一就是”看上去像Java”,而且网景公司出于营销考虑与Sun公司达成协议而采用了近似Java的名字JavaScript。因此二者虽然在语法(许多名称,句法和命名规范也借鉴自Java)上一些相似之处,许多名称和命名规范也借自Java。但是实际上,JavaScript的主要设计原则源自Self和Scheme,它与Java本质上是不同的。对于非专业开发人员来说,JS会比JAVA容易学习。
二者都具有C风格的语法(C是二者最后的共同祖先)和面向对象,典型沙盒,广泛应用于客户端WEB程序,但是相同之处也就到此为止了。JAVA是静态类型,而JS是动态类型(变量可以处理一个未严格定义的对象);JAVA从已编译的二进制代码载入,而JS从可人工阅读的源码载入;JAVA的对象基于类class,而JS的对象基于原型prototype。
然而, JS设计之初参考了JAVA的语法和标准库,尤其是所有的JAVA关键字都在JS中保留了。JS的标准库沿用了JAVA的命名约定,JS的Math和Date对象基于Java 1.0的类而设计。
2,JScript
微软决定进军浏览器,为了取得技术优势,微软推出了JScript来迎战JavaScript,1996年8月发布了IE 3.0并搭载了一个JavaScript的克隆版(令MS声名狼藉),叫做Jscript(这样命名是为了避免与Netscript潜在许可纠纷)。
版本 |
说明 |
实现 |
|||
JScript 1.0 |
基本上相当于JavaScript1.0。 |
由IE 3 的早期版本实现。 |
|||
JScript 2.0 |
基本上相当于JavaScript1.1。 |
由IE 3 的后期版本实现。 |
|||
JScript 3.0 |
基本上相当于JavaScript1.3,符合ECMAv1。 |
由IE 4 实现。 |
|||
JScript 4.0 |
还没有任何Web浏览器能实现它。 |
||||
JScript 5.0 |
支持异常处理。部分符合ECMAv3。 |
由IE 5 实现。 |
|||
JScript 5.5 |
基本上相当于JavaScript1.5,符合ECMAv3。 |
由IE 5.5 实现。 |
|||
JScript 5.6 |
在客户端与JScript5.5没有区别。 |
由IE 6 实现。 |
3,ECMA
在微软进入后,有3种不同的JavaScript版本同时存在:Netsape Navigator3.0中的JavaScript、IE中的Jscript以及Ceniv中的JavaScript。为了互用性,JavaScript被Netscape和Sun公司提交给ECMA(前身为欧洲计算机制造商协会)制定为标准。由来自Netscape、Sun、微软、Borland和其他一些对脚本编程感兴趣的公司和程序员组成的第39技术委员会(TC39)建立了ECMA-262标准(ECMAScript),该标准定义了叫做ECMAScript的全新脚本语言。对JavaScript语言进行了标准化,
现在JavaScript和JScript两者都属于ECMAScript的实作。
版本 |
说明 |
实现 |
|||
ECMA v1 |
标准化了JavaScript1.1的基本特性,并添加了一些新特性。没有标准化switch语句和正则表达式。 |
由Netscape 4.5 和IE 4 实现。 |
|||
ECMA v2 |
ECMA v1的维护版本,只添加了说明。 |
由Netscape 4.5 和IE 4 实现。 |
|||
ECMA v3 |
标准化了switch语句、异常处理和正则表达式。 |
由Mozilla、Netscape 6 和 IE5.5 实现。 |
|||
ECMA v4 |
开发过程中 |
对应JavaScript 2.0 |
目前符合ECMA-262 V3标准的实现有:
* Microsoft公司的JScript. * Mozilla的Javascript-C(C语言实现),现名Spidermonkey,经测试性能最好。 * Mozilla的Rhino(Java实现) * Digital Mars公司的DMDScript。 * Google公司的V8 * WebKit
五,javascript教程
javascript语法基础:语法和语义
六,Javascript开发
参见
50个令人叹为观止的JavaScript应用站点: COMSHARP CMS 写道 “随着诸如 jQuery, Mootools, Prototype 一类的 JavaScript 框架的崛起,Web 开发者们基于这些框架创建了众多令人叹为观止的效果。以下的50个站点全部基于 JavaScript,却拥有 Flash 一样的绚丽效果。在很多 Web 开发者看来,Flash 并不是他们的首要选择,因为 Flash 至今对搜索引擎仍是不透明的,另外,Flash 的渲染需要浏览器插件,而 JavaScript 的一切都是本地的(图文)。”