本頁使用了標題或全文手工轉換

JavaScript

維基百科,自由的百科全書
前往: 導覽搜尋
Confusion grey.svg
提示:本條目的主題不是JavaJScript
JavaScript
Unofficial JavaScript logo 2.svg
非官方JavaScript標誌
編程範型 程式語言物件導向基於原型),指令式函數式
設計者 布蘭登·艾克
實作者 網景通訊公司Mozilla基金會
面市時間 1995年,​22年前​(1995
最近釋出日期 ECMAScript 2016[1](2016年6月17日,​13個月前​(2016-06-17
型態系統 動態類型duck

JavaScript
Javascript icon.svg
副檔名 .js
網路媒體型式 application/javascript
text/javascript (obsolete)[2]
統一類型標識英語Uniform Type Identifier com.netscape.javascript-source[3]
格式類型 程式語言

JavaScript,一種高級程式語言,通過解釋執行,是一門動態類型物件導向基於原型)的直譯語言[4]。它已經由ECMA(歐洲電腦製造商協會)透過ECMAScript實現語言的標準化[4]。它被世界上的絕大多數網站所使用,也被世界主流瀏覽器ChromeIEFireFoxSafariOpera)支持。JavaScript是一門基於原型、函數先行的語言[5],是一門多範式的語言,它支持物件導向程式設計,命令式程式設計,以及函數式程式設計。它提供語法來操控文本、陣列、日期以及正則表達式等,不支援I/O,比如網路、儲存和圖形等,但這些都可以由它的宿主環境提供支援。

雖然JavaScript與Java這門語言不管是在名字上,或是在語法上都有很多相似性,但這兩門程式語言從設計之初就有很大的不同,JavaScript的語言設計主要受到了Self(一種基於原型的程式語言)和Scheme(一門函數式程式語言)的影響[5]。在語法結構上它又與C語言有很多相似(例如if條件語句、while循環、switch語句、do-while循環等)[6]

在客戶端,JavaScript在傳統意義上被實現為一種解釋語言,但在最近,它已經可以被即時編譯(JIT)執行。隨著最新的HTML5CSS3語言標準的推行它還可用於遊戲、桌面和行動應用程式的開發和在伺服器端網路環境運行,如Node.js

歷史[編輯]

在網景公司的開始[編輯]

1995年,當時在網景公司就職的布蘭登·艾克正為Netscape Navigator 2.0瀏覽器開發的一門名為LiveScript的程式語言,後來網景公司與昇陽電腦公司組成的開發聯盟為了讓這門語言搭上java這個程式語言「熱詞」,將其臨時改名為「JavaScript」,日後這成為大眾對這門語言有諸多誤解的原因之一。

JavaScript推出後在瀏覽器上大獲成功,微軟公司在不久後就為Internet Explorer 3.0瀏覽器推出了JScript,以與處於市場領導地位的網景產品同台競爭。JScript也是一種JavaScript實現,這兩個JavaScript語言版本在瀏覽器端共存意味著語言標準化的缺失,對這門語言進行標準化被提上了日程,在1997年,由網景昇陽微軟寶藍等公司組織及個人組成的技術委員會在ECMA(歐洲計算機製造商協會)確定定義了一種名叫ECMAScript的新程式語言標準[7],規範名為ECMA-262。JavaScript成為了ECMAScript的實現之一[8]

完整的JavaScript實現應該包含三個部分,即ECMAScript(語言核心)、DOM(文檔對象模型)、BOM(瀏覽器對象模型)[8]

標準化[編輯]

網景在最初將其腳本語言命名為LiveScript,後來網景在與昇陽公司合作之後將其改名為JavaScript[9]。JavaScript最初受Java啟發而開始設計的,目的之一就是「看上去像Java」[10],因此語法上有類似之處,一些名稱和命名規範也借自Java。但JavaScript的主要設計原則源自SelfScheme[11]。JavaScript與Java名稱上的近似,是當時網景為了營銷考慮與昇陽電腦達成協議的結果。為了取得技術優勢,微軟推出了JScript來迎戰JavaScript的腳本語言。為了互用性,Ecma國際(前身為歐洲計算機製造商協會)建立了ECMA-262標準(ECMAScript)。現在兩者都屬於ECMAScript的實現。儘管JavaScript作為給非程式人員的腳本語言,而非作為給程式人員的程式語言來推廣和宣傳,但是JavaScript具有非常豐富的特性。

發展初期,JavaScript的標準並未確定,同期有網景的JavaScript,微軟的JScript三足鼎立。1997年,在ECMA(歐洲計算機製造商協會)的協調下,由網景、昇陽、微軟、寶藍組成的工作組確定統一標準:ECMA-262。

商標[編輯]

JavaScript目前為甲骨文公司在美國的註冊商標[12][13]

概論[編輯]

一般來說,完整的JavaScript包括以下幾個部分:

  • ECMAScript,描述了該語言的語法和基本對象
  • 文檔對象模型(DOM),描述處理網頁內容的方法和接口
  • 瀏覽器對象模型(BOM),描述與瀏覽器進行交互的方法和接口

它的基本特點如下:

  • 是一種解釋性程式語言(代碼不進行預編譯)。
  • 主要用來向HTML頁面添加交互行為
  • 可以直接嵌入HTML頁面,但寫成單獨的js文件有利於結構和行為的分離。

JavaScript常用來完成以下任務:

  • 嵌入動態文本於HTML頁面
  • 對瀏覽器事件作出響應
  • 讀寫HTML元素
  • 在數據被提交到伺服器之前驗證數據
  • 檢測訪客的瀏覽器信息
  • 控制cookies,包括創建和修改等

特性[編輯]

不同於伺服器端腳本語言,例如PHPASP,JavaScript主要被作為客戶端腳本語言在用戶的瀏覽器上運行,不需要伺服器的支持。所以在早期程式設計師比較青睞於JavaScript以減少對伺服器的負擔,而與此同時也帶來另一個問題:安全性。而隨著伺服器的強壯,雖然現在的程序員更喜歡運行於伺服端的腳本以保證安全,但JavaScript仍然以其跨平台、容易上手等優勢大行其道。同時,有些特殊功能(如AJAX)必須依賴JavaScript在客戶端進行支持。隨著引擎如V8和框架如Node.js的發展,及其事件驅動異步IO英語Asynchronous I/O等特性,JavaScript逐漸被用來編寫伺服器端程式。且在近幾年中,Node.js的出世,讓JavaScript也具有了一定的伺服器功能,且在某些方面比PHP的效果更為顯著。

指令式與結構化[編輯]

JavaScript從支持許多C語言的結構化編程語法(例如if條件語句、while循環、switch語句、do-while循環等)。但作用域是一個例外:JavaScript只支持使用var關鍵字來定義變量的函數作用域。ECMAScript加入了let關鍵字來支持塊級作用域,意味著JavaScript現在既支持函數作用域又支持塊級作用域。正如C語言一樣,JavaScript中的表達式和語句是不同的。與C不同,JavaScript支持自動在語句末添加分號。

動態化[編輯]

正如大部分程式語言,類型與值而不是與變量關聯。例如x變量可以為數值,隨後又可被賦值為字符串。JavaScript提供了包括鴨子類型在內的方法來檢測變量類型。

Eval()[編輯]

Eval() 函數可以直接執行一個JavaScript函式。例如:

eval("alert(\"Message\")");

編程[編輯]

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語言,以編譯語言編寫的程式在執行之前,必須經過編譯,將程式碼編譯為機器碼,再加以執行。

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!");            // 開啟對話視窗顯示
            console.log("Hello, world!");      // zh-tw:於console裡顯示,需要先開啟開發工具控制台
        </script>
    </head>
    <body>
    HTML內容……
    </body>
</html>

或是在瀏覽器網址列中使用javascript:,以互動方式表示:

javascript:alert("Hello world!");

版本[編輯]

JavaScript最初開發於1996年,被使用於Netscape Navigator網頁瀏覽器。同年微軟在Internet Explorer發布了一個實作。由於商標問題,這項實作被命名為JScript。1997年,JavaScript已經被網景公司提交給ECMA制定為標準,稱之為ECMAScript,標準編號ECMA-262。目前最新版為ECMA-262 5th Edition[14]。目前ECMA-262 4th Edition正在開發的過程中,與其對應的JavaScript的版本為JavaScript 2.0,目前也正在開發過程中。

下列表格的資訊基於多個參考來源[15][16][17][18]

版本 發布日期 基於 Netscape
Navigator
Mozilla
Firefox
Internet
Explorer
Opera Safari Google
Chrome
舊版本,不再支持: 1.0 1996年3月 2.0 3.0
舊版本,不再支持: 1.1 1996年8月 3.0
舊版本,不再支持: 1.2 1997年6月 4.0 - 4.05 3
舊版本,不再支持: 1.3 1998年10月 ECMA-262 1st + 2nd edition 4.06 - 4.7x 4.0 5[19]
舊版本,不再支持: 1.4 Netscape
Server
6
舊版本,不再支持: 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 5.8)
7.0 3.0-5 1.0 - 10.0.666
舊版本,不再支持: 1.6 2005年11月 1.5 + Array extras + Array and string generics + E4X 1.5
舊版本,不再支持: 1.7 2006年10月 1.6 + Pythonic generators + Iterators + Let 2.0 28.0.1500.95
舊版本,不再支持: 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.2 + New features for ECMA-262 5th edition compliance 4.0

參見[編輯]

Wikibooks-logo.svg
您可以在維基教科書中查找此百科條目的相關電子教程:

參考文獻[編輯]

  1. ^ Standard ECMA-262. Ecma International. 2015-06-17. 
  2. ^ RFC 4329 網際網路檔案館存檔,存檔日期2014-03-16.
  3. ^ System-Declared Uniform Type Identifiers. Mac OS X Reference Library. Apple Inc. [2010-03-05]. 
  4. ^ 4.0 4.1 David, Flanagan. JavaScript: The Definitive Guide 6th. O'Reilly & Associates. ISBN 978-0-596-80552-4. 
  5. ^ 5.0 5.1 ECMAScript Language Overview (PDF): 4. 2007-10-23 [2009-05-03]. (原始內容 (PDF)存檔於2010-07-13). 
  6. ^ JavaScript: The World's Most Misunderstood Programming Language. www.crockford.com. [2016-08-17]. 
  7. ^ http://www.ecma-international.org/publications/index.html
  8. ^ 8.0 8.1 Nicholas, Zakas. Professional JavaScript for Web Developers 3rd. Wrox. 2012. ISBN 978-1-118-02669-4. 
  9. ^ Press release announcing JavaScript, "Netscape and Sun announce Javascript", PR Newswire, December 4, 1995
  10. ^ TechVision: Innovators of the Net: Brendan Eich and JavaScript (HTML). 2009-03-19. (原始內容存檔於2008-02-08). 
  11. ^ ECMAScript Language Overview (PDF): p.4. 2007-10-23. (原始內容 (PDF)存檔於2010-07-13). 
  12. ^ USPTO Copyright entry #75026640. USPTO. 
  13. ^ Sun Trademarks. Sun Microsystems. [2007-11-08]. (原始內容存檔於28 May 2010). 
  14. ^ https://developer.mozilla.org/en/JavaScript/Language_Resources
  15. ^ New in JavaScript. developer.mozilla.org. 2014 [2016-07-16]. 
  16. ^ JavaScript – JScript – ECMAScript version history. Webmasterworld.com. [2009-12-17]. 
  17. ^ John Resig. Versions of JavaScript. Ejohn.org. [2009-05-19]. 
  18. ^ Version Information (JScript). Msdn.microsoft.com. [2009-12-17]. 
  19. ^ What Version of JavaScript. 

外部連結[編輯]