JavaScript者,電腦程式語言也。通過解釋執行,是一門動態型別,物件導向(基於原型)的直譯語言。它已經由ECMA(歐洲電腦製造商協會)通過ECMAScript實現語言的標準化。它被世界上的絕大多數網站所使用,也被世界主流瀏覽器(Chrome、IE、FireFox、Safari、Opera)支援。JavaScript是一門基於原型、函式先行的語言[5],是一門多範式的語言,它支援物件導向編程,指令式編程,以及函數語言程式設計。在用戶端,JavaScript在傳統意義上被實現為一種解釋語言,但在最近,它已經可以被即時編譯(JIT)執行。隨著最新的HTML5和CSS3語言標準的推行它還可用於遊戲、桌面和行動應用程式的開發和在伺服器端網路環境執行,如Node.js。JavaScript目前為甲骨文公司在美國的註冊商標[12][13]。

在网景公司的开始

1995年,当时在网景公司就职的布兰登·艾克正为Netscape Navigator 2.0浏览器开发的一门名为LiveScript的脚本语言,后来网景公司与昇阳电脑公司组成的开发联盟为了让这门语言搭上java这个编程语言“热词”,将其临时改名为“JavaScript”,日后这成为大众对这门语言有诸多误解的原因之一。

JavaScript推出后在浏览器上大获成功,微软公司在不久后就为Internet Explorer 3.0浏览器推出了JScript,以与处于市场领导地位的网景产品同台竞争。JScript也是一种JavaScript实现,这两个JavaScript语言版本在浏览器端共存意味着语言标准化的缺失,对这门语言进行标准化被提上了日程,在1997年,由網景昇陽微软寶藍等公司组织及个人组成的技术委员会在ECMA(欧洲计算机制造商协会)确定定义了一种名叫ECMAScript的新脚本语言标准[],规范名为ECMA-262。JavaScript成为了ECMAScript的实现之一[]

完整的JavaScript实现应该包含三个部分,即ECMAScript(语言核心)、DOM(文档对象模型)、BOM(浏览器对象模型)[]

标准化

网景在最初將其腳本語言命名為LiveScript,後來網景在與昇陽公司合作之後將其改名為JavaScript[]。JavaScript最初受Java启发而开始设计的,目的之一就是“看上去像Java”[],因此语法上有类似之处,一些名称和命名规范也借自Java。但JavaScript的主要设计原则源自SelfScheme[]。JavaScript与Java名称上的近似,是当时网景为了营销考虑与太陽電腦达成-{zh-hans:协议; zh-tw:協議}-的结果。為了取得技術優勢,微軟推出了JScript來迎戰JavaScript的腳本語言。为了互用性,Ecma国际(前身为欧洲计算机制造商协会)建立了ECMA-262标准(ECMAScript)。现在两者都属于ECMAScript的实现。儘管JavaScript作為給非程式人員的腳本語言,而非作為給程式人員的程式語言來推廣和宣傳,但是JavaScript具有非常豐富的特性。

发展初期,JavaScript的标准并未确定,同期有网景的JavaScript,微软的JScript三足鼎立。1997年,在ECMA(欧洲计算机制造商协会)的协调下,由網景、昇陽、微软、寶藍组成的工作组确定统一标准:ECMA-262。

編程

不同於伺服器端腳本語言,例如PHP與ASP,JavaScript主要被作為用戶端腳本語言在用戶的瀏覽器上運行,不需要伺服器的支援。所以在早期程式設計師比較青睞於JavaScript以減少對伺服器的負擔,而與此同時也帶來另一個問題:安全性。而隨著伺服器的強壯,雖然現在的程式員更喜歡運行於伺服端的腳本以保證安全,但JavaScript仍然以其跨平台、容易上手等優勢大行其道。同時,有些特殊功能(如AJAX)必須依賴JavaScript在用戶端進行支援。隨著引擎如V8和框架如Node.js的發展,及其事件驅動及異步IO等特性,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\")");

  1. http://www.ecma-international.org/publications/index.html
  2. 二點〇 二點一 Nicholas·Zakas Professional JavaScript for Web Developers (3rd ed.)  ; Wrox; 二千一十二年; ISBN ISBN 978-1-118-02669-4.
  3. Press release announcing JavaScript, "Netscape and Sun announce Javascript", PR Newswire, December 4, 1995
  4. TechVision: Innovators of the Net: Brendan Eich and JavaScript (HTML)
  5. ECMAScript Language Overview (PDF)