JavaScript是一种广泛用于客户端网页开发的脚本语言,最常是于HTML上使用,用来给HTML网页添加动态功能。然而JavaScript也被用于不同的接口上,如服务器。它最初由网景公司的Brendan Eich设计,是一种动态、弱类型、基于原型的语言,内置支持类型。JavaScript是甲骨文公司的注册商标。[4] Ecma国际以JavaScript为基础制定了ECMAScript标准。JavaScript也可以用于其他场合,如服务器端编程。完整的JavaScript实现包含三个部分:ECMAScript,文档对象模型,浏览器对象模型。
Netscape在最初将其脚本语言命名为LiveScript,后来Netscape在与Sun合作之后将其改名为JavaScript。JavaScript最初受Java启发而开始设计的,目的之一就是“看上去像Java”[5],因此语法上有类似之处,一些名称和命名规范也借自Java。但JavaScript的主要设计原则源自Self和Scheme[6]。JavaScript与Java名称上的近似,是当时网景为了营销考虑与太阳微系统达成协议的结果。为了取得技术优势,微软推出了JScript来迎战JavaScript的脚本语言。为了互用性,Ecma国际(前身为欧洲计算机制造商协会)创建了ECMA-262标准(ECMAScript)。现在两者都属于ECMAScript的实现。尽管JavaScript作为给非程序人员的脚本语言,而非作为给程序人员的脚本语言来推广和宣传,但是JavaScript具有非常丰富的特性。
目录 |
版本标准
JavaScript 已经被 Netscape 公司提交给 ECMA 制定为标准,称之为 ECMAScript,标准编号 ECMA-262。目前最新版为 ECMA-262 5th Edition[7]。符合 ECMA-262 3rd Edition 标准的实现有:
- Microsoft 公司的 JScript
- Mozilla 的 JavaScript-C(C语言实现),现名 SpiderMonkey
- Mozilla 的 Rhino(Java 实现)
- Digital Mars 公司的 DMDScript
- Google 公司的 V8
- WebKit
目前 ECMA-262 4th Edition 正在开发的过程中,与其对应的 JavaScript 的版本为 JavaScript 2.0,目前也正在开发过程中。
特性
不同于服务器端脚本语言,例如PHP与ASP,JavaScript主要被作为客户端脚本语言在用户的浏览器上运行,不需要服务器的支持。所以在早期程序员比较青睐于JavaScript以减少对服务器的负担,而与此同时也带来另一个问题:安全性。而随着服务器的强壮,虽然现在的程序员更喜欢运行于服务端的脚本以保证安全,但JavaScript仍然以其跨平台、容易上手等优势大行其道。同时,有些特殊功能(如AJAX)必须依赖Javascript在客户端进行支持。随着引擎如V8和框架如Node.js的发展,及其事件驱动及异步IO等特性,JavaScript逐渐被用来编写服务器端程序。
JavaScript是一种脚本语言,其源代码在发往客户端运行之前不需经过编译,而是将文本格式的字符代码发送给浏览器由浏览器解释运行。直译语言的弱点是安全性较差,而且在JavaScript中,如果一条运行不了,那么下面的语言也无法运行。而其解决办法就是于使用try{}catch(){}
︰
console.log("a"); //這是正確的 console.log("b"); //這是正確的 console.logg("c"); //這不是正確的,並會到這裡時停下來 console.log("d"); //這是正確的 console.log("e"); //這是正確的 /*解決辦法*/ try{console.log("a");}catch(e){} //這是正確的 try{console.log("b");}catch(e){} //這是正確的 try{console.logg("c");}catch(e){} //這不是正確的,但不會停下來,而是跳過 try{console.log("d");}catch(e){} //這是正確的 try{console.log("e");}catch(e){} //這是正確的
Javascript被归类为直译语言,因为目前主流的引擎都是每次运行时加载代码并解译。V8是将所有代码解译后再开始运行,其他引擎则是逐行解译(SpiderMonkey会将解译过的指令暂存,以提高性能,称为实时编译),但由于V8的核心部份多数用Javascript撰写(而SpiderMonkey是用C++),因此在不同的测试上,两者性能互有优劣。
与其相对应的是编译语言,例如C。以编译语言编写的程序在运行之前,必须经过编译,将代码编译为机器码,再加以运行。
JavaScript的Hello World
以下是一个简单的JavaScript Hello World︰
<!DOCTYPE HTML> <html> <head> <title>簡單的JavaScript Hello World</title> <script type="text/javascript"> document.write("Hello, world!"); // 於瀏覽器視窗內直接顯示。 alert("Hello, world!"); // 於alert裡顯示。 console.log("Hello, world!"); // 於console裡顯示。IE下需要先开启开发工具控制台 </script> </head> <body> HTML 內文…… </body> </html>
或是在浏览器的地址栏(location bar)中使用javascript:
,以交互方式表示:
javascript:alert("Hello world!");
版本历史
版本 | 发布日期 | 基于 | Netscape Navigator | Mozilla Firefox | Internet Explorer | Opera | Safari | Chrome浏览器 |
---|---|---|---|---|---|---|---|---|
1.0 | 1996年3月 | 2.0 | ||||||
1.1 | 1996年8月 | 3.0 | 3.0 | |||||
1.2 | 1997年6月 | 4.0-4.05 | ||||||
1.3 | 1998年10月 | ECMA-262 1st edition / ECMA-262 2nd edition | 4.06-4.7x | 4.0 | ||||
1.4 | Netscape Server | |||||||
1.5 | 2000年11月 | ECMA-262 3rd edition | 6.0 | 1.0 | 5.5 (JScript 5.5), 6 (JScript 5.6), 7 (JScript 5.7), 8 (JScript 6) | 6.0, 7.0, 8.0, 9.0 | ||
1.6 | 2005年11月 | 1.5 + Array extras + Array and String generics + E4X | 1.5 | 3.0, 3.1 | ||||
1.7 | 2006年10月 | 1.6 + Pythonic generators + Iterators + let | 2.0 | 3.2, 4.0 | 1.0 | |||
1.8 | 2008年6月 | 1.7 + Generator expressions + Expression closures | 3.0 | |||||
1.8.1 | 1.8 + Native JSON support + Minor Updates | 3.5 | ||||||
1.8.2 | 1.8.1 + Minor updates | 3.6 | ||||||
1.8.5 | 1.8.1 + ECMAScript 5 Compliance | 4 | 9 |
比较
版本 | 说明 | 实现 |
---|---|---|
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和IE 5.5实现。 |
参见
参考文献
- ^ [1]
- ^ RFC 4329
- ^ System-Declared Uniform Type Identifiers. Mac OS X Reference Library. Apple Inc. [2010-03-05].
- ^ Sun Trademarks. Sun Microsystems [2007-11-08].
- ^ TechVision: Innovators of the Net: Brendan Eich and JavaScript (HTML). 2009-3-19.
- ^ ECMAScript Language Overview (PDF). 2007-10-23: p.4.
- ^ https://developer.mozilla.org/en/JavaScript/Language_Resources
- ^ John Resig. Versions of JavaScript. Ejohn.org [2009-05-19].
外部链接
- About JavaScript Mozilla.org上的资源(英文)(简体中文)(日文)
- JavaScript Note(正体中文)
- W3Schools上的JavaScript在线教学(英文)
|
隐藏▲
网页技术与标准
| |
---|---|
文档呈现语言 | |
样式格式描述语言 | |
动态网页技术 | |
客户端交互技术 | |
客户端脚本语言 | |
标识定位语言 | |
文档纲要语言 | |
* 代表由
W3C制定和维护的标准与规范
|