JavaScript

![]() | |
编程范型 | Multi-paradigm: 脚本语言, 面向对象 (基于原型), 指令式, 函数式 |
---|---|
設計者 | Brendan Eich |
實作者 | 网景通讯公司,谋智基金会 |
发行时间 | 1995 |
当前版本 | |
型態系統 | dynamic, weak, duck |
網站 | www |
主要實作產品 | |
KJS, Rhino, SpiderMonkey, V8, WebKit, Carakan, Chakra | |
受影响于 | |
C, Java, Perl, Python, Scheme, Self | |
影響語言 | |
ActionScript, CoffeeScript, Dart, JScript .NET, Objective-J, QML, TIScript | |
|
扩展名 |
.js |
---|---|
互联网媒体类型 | |
统一类型标识 | com.netscape.javascript-source[5] |
格式类型 | 脚本语言 |
JavaScript是一種廣泛用於客户端網頁开发的腳本語言,最常是於HTML上使用,用来给HTML网页添加动态功能。然而JavaScript也被用於不同的介面上,如伺服器。它最初由网景公司的Brendan Eich设计,是一种动态、弱类型、基于原型的语言,内置支持類別。JavaScript是甲骨文公司的注册商标。[6] Ecma国际以JavaScript为基础制定了ECMAScript标准。JavaScript也可以用于其他场合,如服务器端编程。完整的JavaScript实现包含三个部分:ECMAScript,文档对象模型,浏览器对象模型。
Netscape在最初將其腳本語言命名為LiveScript,後來Netscape在與Sun合作之後將其改名為JavaScript。JavaScript最初受Java启发而开始设计的,目的之一就是“看上去像Java”[7],因此语法上有类似之处,一些名称和命名规范也借自Java。但JavaScript的主要设计原则源自Self和Scheme[8]。JavaScript与Java名称上的近似,是当时网景为了营销考虑与太陽電腦达成协议的结果。為了取得技術優勢,微軟推出了JScript來迎戰JavaScript的腳本語言。为了互用性,Ecma国际(前身为欧洲计算机制造商协会)建立了ECMA-262标准(ECMAScript)。现在两者都属于ECMAScript的实现。儘管JavaScript作為給非程式人員的腳本語言,而非作為給程式人員的程式語言來推廣和宣傳,但是JavaScript具有非常豐富的特性。
版本標準
JavaScript 已經被 Netscape 公司提交給 ECMA 制定為標準,稱之為 ECMAScript,標準編號 ECMA-262。目前最新版為 ECMA-262 5th Edition[9]。符合 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 | Google 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實現。 |
參見

參考文獻
- ^ ECMAScript® 2024 Language Specification. 2024年6月 [2024年8月30日].
- ^ ECMAScript® 2025 Language Specification. 2024年3月27日 [2024年4月17日].
- ^ [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): p.4. 2007-10-23.
- ^ 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線上教學(英文)
- JavaScript 教材(繁體中文)