JavaScript
|
|
本條目含有過多、重複、或不必要的內部連結。(2015年6月3日) |
非官方JavaScript標誌
|
|||||||
| 編程範型 | 程式語言,物件導向(基於原型),指令式,函數式 | ||||||
|---|---|---|---|---|---|---|---|
| 設計者 | 布蘭登·艾克 | ||||||
| 實作者 | 網景通訊公司,Mozilla基金會 | ||||||
| 面市時間 | 1995年 | ||||||
| 最近釋出日期 | 1.8.5[1] / 2011年3月22日 | ||||||
| 型態系統 | 動態型別、duck | ||||||
|
|||||||
|
|
|||||||
| 副檔名 | .js |
|---|---|
| 網路媒體型式 | application/javascript text/javascript (obsolete)[2] |
| 統一類型標識 | com.netscape.javascript-source[3] |
| 格式 | 程式語言 |
JavaScript,一種直譯式程式語言,是一種動態型別、基於原型的語言,內建支援類別。它的直譯器被稱為JavaScript引擎,為瀏覽器的一部分,廣泛用於用戶端的腳本語言,最早是在HTML網頁上使用,用來給HTML網頁增加動態功能。然而現在JavaScript也可被用於網路伺服器,如Node.js。
在1995年時,由網景公司的布蘭登·艾克,在網景領航員瀏覽器上首次設計實作而成。因為網景公司與昇陽公司合作,網景公司管理層希望它外觀看起來像Java,因此取名為JavaScript。但實際上它的語意與Self及Scheme較為接近[4]。
為了取得技術優勢,微軟推出了JScript,與JavaScript同樣可在瀏覽器上運行。為了統一規格,1997年,在ECMA(歐洲電腦製造商協會)的協調下,由網景、昇陽、微軟和Borland公司組成的工作群組確定統一標準:ECMA-262。因為JavaScript相容於ECMA標準,因此也稱為ECMAScript[5]。
概論[編輯]
一般來說,完整的JavaScript包括以下幾個部分:
- ECMAScript,描述了該語言的語法和基本物件
- 文件物件模型(DOM),描述處理網頁內容的方法和介面
- 瀏覽器物件模型(BOM),描述與瀏覽器進行互動的方法和介面
它的基本特點如下:
- 是一種解釋性程式語言(代碼不進行預編譯)。
- 主要用來向HTML頁面添加互動行為。
- 可以直接嵌入HTML頁面,但寫成單獨的js檔案有利於結構和行為的分離。
JavaScript常用來完成以下任務:
歷史[編輯]
它最初由網景公司的布蘭登·艾克設計。JavaScript是甲骨文公司的註冊商標。[6] Ecma國際以JavaScript為基礎制定了ECMAScript標準。JavaScript也可以用於其他場合,如伺服器端編程。完整的JavaScript實作包含三個部分:ECMAScript,文件物件模型,瀏覽器物件模型。
Netscape在最初將其腳本語言命名為LiveScript,後來網景在與昇陽公司合作之後將其改名為JavaScript[7]。JavaScript最初受Java啟發而開始設計的,目的之一就是「看上去像Java」[8],因此語法上有類似之處,一些名稱和命名規範也借自Java。但JavaScript的主要設計原則源自Self和Scheme[9]。JavaScript與Java名稱上的近似,是當時網景為了行銷考慮與昇陽電腦達成協定的結果。為了取得技術優勢,微軟推出了JScript來迎戰JavaScript的腳本語言。為了互用性,Ecma國際(前身為歐洲電腦製造商協會)建立了ECMA-262標準(ECMAScript)。現在兩者都屬於ECMAScript的實作。儘管JavaScript作為給非程式人員的腳本語言,而非作為給程式人員的程式語言來推廣和宣傳,但是JavaScript具有非常豐富的特性。
發展初期,JavaScript的標準並未確定,同期有網景的JavaScript,微軟的JScript三足鼎立。1997年,在ECMA(歐洲電腦製造商協會)的協調下,由Netscape、Sun、微軟、Borland組成的工作群組確定統一標準:ECMA-262。
常用函式庫[編輯]
特性[編輯]
不同於伺服器端腳本語言,例如PHP與ASP,JavaScript主要被作為用戶端腳本語言在用戶的瀏覽器上運行,不需要伺服器的支援。所以在早期程式員比較青睞於JavaScript以減少對伺服器的負擔,而與此同時也帶來另一個問題:安全性。而隨著伺服器的強壯,雖然現在的程式員更喜歡運行於伺服端的腳本以保證安全,但JavaScript仍然以其跨平台、容易上手等優勢大行其道。同時,有些特殊功能(如AJAX)必須依賴Javascript在用戶端進行支援。隨著引擎如V8和框架如Node.js的發展,及其事件驅動及異步IO等特性,JavaScript逐漸被用來編寫伺服器端程式。
編程[編輯]
JavaScript是一種腳本語言,其原始碼在發往用戶端執行之前不需經過編譯,而是將文字格式的字符代碼發送給瀏覽器由瀏覽器解釋執行。直譯語言的弱點是安全性較差,而且在JavaScript中,如果一條執行不了,那麼下面的語言也無法執行。而其解決辦法就是於使用try{}catch(){}︰
console.log("a"); //-{zh-cn:这是正确的;zh-tw:這是正確的;}-
console.log("b"); //-{zh-cn:这是正确的;zh-tw:這是正確的;}-
console.logg("c"); //-{zh-cn:这是错误的,并且到这里会停下来;zh-tw:這不是正確的,並會到這裡時停下來;}-
console.log("d"); //-{zh-cn:这是正确的;zh-tw:這是正確的;}-
console.log("e"); //-{zh-cn:这是正确的;zh-tw:這是正確的;}-
/*-{zh-cn:解决办法;zh-tw:解決辦法;}-*/
try{console.log("a");}catch(e){} //-{zh-cn:这是正确的;zh-tw:這是正確的;}-
try{console.log("b");}catch(e){} //-{zh-cn:这是正确的;zh-tw:這是正確的;}-
try{console.logg("c");}catch(e){} //-{zh-cn:这是错误的,但是到这里不会停下来,而是跳过;zh-tw:這不是正確的,但不會停下來,而是跳過;}-
try{console.log("d");}catch(e){} //-{zh-cn:这是正确的;zh-tw:這是正確的;}-
try{console.log("e");}catch(e){} //-{zh-cn:这是正确的;zh-tw:這是正確的;}-
Javascript被歸類為直譯語言,因為目前主流的引擎都是每次執行時載入程式碼並解譯。V8是將所有程式碼解譯後再開始執行,其他引擎則是逐行解譯(SpiderMonkey會將解譯過的指令暫存,以提高效能,稱為即時編譯),但由於V8的核心部份多數用Javascript撰寫(而SpiderMonkey是用C++),因此在不同的測試上,兩者效能互有優劣。
與其相對應的是編譯語言,例如C語言,以編譯語言編寫的程式在執行之前,必須經過編譯,將程式碼編譯為機器碼,再加以執行。
Hello World[編輯]
以下是一個簡單的JavaScript Hello World︰
<!DOCTYPE HTML>
<html>
<head>
<title>簡單的JavaScript Hello World</title>
<script type="text/javascript">
document.write("Hello, world!"); // -{zh-cn:在浏览器视窗内直接显示;zh-tw:於瀏覽器視窗內直接顯示;}-
alert("Hello, world!"); // -{zh-cn:弹窗显示;zh-tw:開啟對話視窗顯示;}-
console.log("Hello, world!"); // -{zh-cn:在控制台(console)里显示,需要先开启开发工具控制台;zh-tw:於console裡顯示。IE下需要先开启开发工具控制台;}-
</script>
</head>
<body>
-{zh-cn:HTML 内容……;zh-tw:HTML 內文……;}-
</body>
</html>
或是在瀏覽器的網址列(location bar)中使用javascript:,以互動方式表示:
javascript:alert("Hello world!");
版本[編輯]
JavaScript已經被Netscape公司提交給ECMA制定為標準,稱之為ECMAScript,標準編號ECMA-262。目前最新版為ECMA-262 5th Edition[10]。符合ECMA-262 3rd Edition標準的實現有:
- Microsoft公司的JScript
- Mozilla的JavaScript-C(C語言實現),現名SpiderMonkey
- Mozilla的Rhino(Java實現)
- Digital Mars公司的DMDScript
- Google公司的V8
- Apple Safari的WebKit
目前ECMA-262 4th Edition正在開發的過程中,與其對應的JavaScript的版本為JavaScript 2.0,目前也正在開發過程中。
| 版本 | 發布日期 | 基於 | 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 | 11.50 | ||||
| 1.8.1 | 1.8 + Native JSON support + Minor Updates | 3.5 | ||||||
| 1.8.2 | 2009年6月22日 | 1.8.1 + Minor updates | 3.6 | |||||
| 1.8.5 | 2010年7月27日 | 1.8.1 + ECMAScript 5 Compliance | 4 | 9 | 11.60 |
比較[編輯]
| 版本 | 說明 | 實現 |
|---|---|---|
| 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].
- ^ ECMAScript Language Overview (PDF). 4. 2007-10-23 [2009-05-03].
- ^ http://www.ecma-international.org/publications/index.html
- ^ Sun Trademarks. Sun Microsystems. [2007-11-08].
- ^ Press release announcing JavaScript, "Netscape and Sun announce Javascript", PR Newswire, December 4, 1995
- ^ TechVision: Innovators of the Net: Brendan Eich and JavaScript (HTML). 2009-03-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].
外部連結[編輯]
- 關於JavaScript介紹 Mozilla Developer Center上的資源(英文)(簡體中文)(日文)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
|