- JavaScript語言精髓與編程實踐
- 周愛民
- 1846字
- 2018-12-30 08:46:39
1.5 為JavaScript正名
至2005年,JavaScript就已經誕生10年了。然而10年之后,這門語言的發明者Brendan Eich還在向這個世界解釋“JavaScript不是Java,也不是腳本化的Java(Java Scription)”。
這實在是計算機語言史上最罕見的一件事了。因為如今幾乎所有的Web頁面中都同時包含了JavaScript與HTML,而后者從一開始就被人們接受,前者卻用了10年都未能向開發人員說清楚“自已是什么”。
Brendan Eich在這份名為“JavaScript這十年(JavaScript at Ten Years)”的演講稿中,重述了這門語言的早期歷史:Brendan Eich自1995年4月受聘于網景公司,開始實現一種名為“魔卡(Mocha)”——JavaScript最早的開發代號或名稱的語言;僅兩個月之后,為了迎合Netscape的Live戰略而更名為LiveScript;到了1995年年末,又為了迎合市場對Java語言的熱情,正式地、也是遺憾地更名為JavaScript,并隨網景瀏覽器推出
。
Brendan在這篇演講稿最末一行寫道:“不要讓營銷決定語言名稱(Don' t let Marketing name your language)”。一門被誤會了10年的語言的名字之爭,是不是就此結束了呢?仍然不是。因為這10年來,JavaScript的名字已經越來越亂,更多市場的因素困擾著這門語言,好像“借用Java之名”已經成了扔不掉的黑鍋。
1.5.1 JavaScript
我們先說正式的、標準的名詞:JavaScript。它實際是指兩個東西:
█ 一種語言的統稱。該語言由Brendan Eich發明,最早用于Netscape瀏覽器。
█ 上述語言的一種規范化的實現。在JavaScript 1.3之前,網景公司將他們在Netscape瀏覽器上的該語言規范的具體實現直接稱為JavaScript,并一度以“Client-Side JavaScript”與“Server-Side JavaScript”區分該語言在瀏覽器NN與NWS(Netscape Web Server)上的實現,但后來他們改變了這個做法。
1.5.2 Core JavaScript
Core JavaScript這個名詞早在1996年(或更早之前)就被定義過,但它直到1998年10月由網景公司發布JavaScript 1.3時才被正式提出來。準確地說,它是指由網景公司和后來的開源組織Mozilla,基于Brendan Eich最初版本的JavaScript引擎而發展出來的腳本引擎,是JavaScript規范的一個主要的實現者、繼承者和發展者。
Core JavaScript的定義如圖1-7所示。

圖1-7 官方手冊中有關Core JavaScript的概念說明
在JavaScript 1.3發布時,Netscape意識到他們不能僅僅以Client/Server來區分JavaScript,因為市面已經出現了很多種JavaScript。于是他們做了一些小小的改變:在發布手冊時,分別發布“Core JavaScript Guide”和“Client-Side JavaScript Guide”。前者是指語言定義與語法規范,后者則是該語言的一種應用環境與應用方法。
所以事實上,自1.3版本開始,Core JavaScript 1.x與JavaScript 1.x是等義的,換言之,我們現在常說的JavaScript 1.x,就是指Core JavaScript,而并不包括Client-Side JavaScript。不過,源于一些歷史的因素,在Core JavaScript中會有一部分關于“LiveConnect技術”的敘述及規范。這在其他(所有的)JavaScript規范與實現中均是不具備的。
不幸的是,Apple公司有一個基于KJS實現的JavaScript引擎,名為JavaScriptCore,屬于WebKit項目的一個組成部分,WebKit項目所實現的產品就是著名的開源跨平臺瀏覽器Safari。所以在了解Core JavaScript同時,還需強調它與JavaScriptCore的不同。
1.5.3 SpiderMonkey JavaScript
Brendan Eich編寫的JavaScript引擎最后由Mozilla貢獻給了開源界,SpiderMonkey便是這個產品開發中的、開源項目的名稱(code-name,即項目代碼名)。為了與我們通常講述的JavaScript語言區分開來,我們使用SpiderMonkey來特指上述由Netscape實現的、Mozilla和開源社區維護的引擎及其規范。
Mozilla Firefox 4.0以后的版本對SpiderMonkey進行了較大的更新,大量使用JIT(Just In Time)編譯技術來提升引擎性能。并且從Firefox 4.0版本開始,Mozilla發布了JavaScript 1.8.5版本,開始支持ES5規范下的語言特性。
在本書此后的描述中,凡稱及SpiderMonkey JavaScript的,將是特指于此;凡稱及JavaScript的,將是泛指JavaScript這一種語言的實現。
1.5.4 ECMAScript
JavaScript的語言規范由網景公司提交給ECMA去審定,并在1997年6月發布了名為ECMAScript Edition 1的規范,或者稱為ECMA-262。4個月后,微軟在IE 4.0中發布了JScript 3.0,宣稱成為第一個遵循ECMA規范來實現的JavaScript腳本引擎。
而因為計劃改寫整個瀏覽器引擎的緣故,網景公司晚了整整一年才推出“完全遵循ECMA規范”的JavaScript 1.3。請注意到這樣一個問題:網景公司首先開發了JavaScript并提交ECMA標準化,但在市場的印象中,網景公司的Core JavaScript 1.3比微軟的JScript 3.0晚了一年實現ECMA所定義的JavaScript規范。這直接導致了一個惡果:JScript成為JavaScript語言的事實標準。
在本書此后的描述中,我們將基于ECMAScript Ed3的規范來講述JavaScript。凡未特別指明的敘述中,所謂JavaScript即是指“一種符合ECMAScript Ed3規范的JavaScript實現”。
1.5.5 JScript
微軟于1996年在IE中實現了一個與網景瀏覽器類似的腳本引擎,微軟把它叫做JScript以示區別,結果JScript這個名字一直用到現在。
直到JScript 3.0之后,JavaScript語言的局面才顯得明朗起來,如圖1-8所示。

圖1-8 JScript與JavaScript各版本間的關系
由于JScript成為JavaScript語言的事實標準,再有IE瀏覽器幾乎占盡市場(如果我們現在不是在討論JavaScript,你也可以把這個因果顛倒過來),因此在1999年之后, Web頁面上出現的腳本代碼基本上都是基于JScript開發的,而Core JavaScript 1.x卻變成了“(事實上的)被兼容者”。
直到2005年前后,源于W3C、ECMA對網頁內容與腳本語言標準化的推動,以及Mozilla Firefox成功地返回瀏覽器市場,Web開發人員開始注重所編寫的腳本代碼是否基于JavaScript的——即是ECMAScript的標準規范,這成為了新一輪語言之爭的起點。
1.5.6 總述
JavaScript這個名詞的多種含義見表1-2。
表1-2 名詞“JavaScript”的多種含義

- Spring Cloud Alibaba核心技術與實戰案例
- C# 2012程序設計實踐教程 (清華電腦學堂)
- CentOS 7 Server Deployment Cookbook
- Animate CC二維動畫設計與制作(微課版)
- Python機器學習編程與實戰
- Java編程的邏輯
- iOS開發實戰:從入門到上架App Store(第2版) (移動開發叢書)
- 常用工具軟件立體化教程(微課版)
- NoSQL數據庫原理
- 好好學Java:從零基礎到項目實戰
- Vue.js 2 Web Development Projects
- 智能搜索和推薦系統:原理、算法與應用
- TypeScript 2.x By Example
- MyBatis 3源碼深度解析
- Mastering HTML5 Forms