JavaScript的發展史

一、誕生

JavaScript 因爲互聯網而生,緊跟着瀏覽器的出現而問世。回顧它的歷史,就要從瀏覽器的歷史講起。

1990年底,歐洲核能研究組織(CERN)科學家 Tim Berners-Lee,在全世界最大的電腦網絡——互聯網的基礎上,發明了萬維網(World Wide Web),從此可以在網上瀏覽網頁文件。最早的網頁只能在操作系統的終端裏瀏覽,也就是說只能使用命令行操作,網頁都是在字符窗口中顯示,這當然非常不方便。

1992年底,美國國家超級電腦應用中心(NCSA)開始開發一個獨立的瀏覽器,叫做 Mosaic。這是人類歷史上第一個瀏覽器,從此網頁可以在圖形界面的窗口瀏覽。

1994年10月,NCSA 的一個主要程序員 Marc Andreessen 聯合風險投資家 Jim Clark,成立了 Mosaic 通信公司(Mosaic Communications),不久後改名爲 Netscape。這家公司的方向,就是在 Mosaic 的基礎上,開發面向普通用戶的新一代的瀏覽器 Netscape Navigator。

1994年12月,Navigator 發佈了1.0版,市場份額一舉超過90%。

Netscape 公司很快發現,Navigator 瀏覽器需要一種可以嵌入網頁的腳本語言,用來控制瀏覽器行爲。當時,網速很慢而且上網費很貴,有些操作不宜在服務器端完成。比如,如果用戶忘記填寫“用戶名”,就點了“發送”按鈕,到服務器再發現這一點就有點太晚了,最好能在用戶發出數據之前,就告訴用戶“請填寫用戶名”。這就需要在網頁中嵌入小程序,讓瀏覽器檢查每一欄是否都填寫了。

管理層對這種瀏覽器腳本語言的設想是:功能不需要太強,語法較爲簡單,容易學習和部署。那一年,正逢 Sun 公司的 Java 語言問世,市場推廣活動非常成功。Netscape 公司決定與 Sun 公司合作,瀏覽器支持嵌入 Java 小程序(後來稱爲 Java applet)。但是,瀏覽器腳本語言是否就選用 Java,則存在爭論。後來,還是決定不使用 Java,因爲網頁小程序不需要 Java 這麼“重”的語法。但是,同時也決定腳本語言的語法要接近 Java,並且可以支持 Java 程序。這些設想直接排除了使用現存語言,比如 Perl、Python 和 TCL。

1995年,Netscape 公司僱傭了程序員 Brendan Eich 開發這種網頁腳本語言。Brendan Eich 有很強的函數式編程背景,希望以 Scheme 語言(函數式語言鼻祖 LISP 語言的一種方言)爲藍本,實現這種新語言。

1995年5月,Brendan Eich 只用了10天,就設計完成了這種語言的第一版。它是一個大雜燴,語法有多個來源。

基本語法:借鑑 C 語言和 Java 語言。
數據結構:借鑑 Java 語言,包括將值分成原始值和對象兩大類。
函數的用法:借鑑 Scheme 語言和 Awk 語言,將函數當作第一等公民,並引入閉包。
原型繼承模型:借鑑 Self 語言(Smalltalk 的一種變種)。
正則表達式:借鑑 Perl 語言。
字符串和數組處理:借鑑 Python 語言。

爲了保持簡單,這種腳本語言缺少一些關鍵的功能,比如塊級作用域、模塊、子類型(subtyping)等等,但是可以利用現有功能找出解決辦法。這種功能的不足,直接導致了後來 JavaScript 的一個顯著特點:對於其他語言,你需要學習語言的各種功能,而對於 JavaScript,你常常需要學習各種解決問題的模式。而且由於來源多樣,從一開始就註定,JavaScript 的編程風格是函數式編程和麪向對象編程的一種混合體。

Netscape 公司的這種瀏覽器腳本語言,最初名字叫做 Mocha,1995年9月改爲 LiveScript。12月,Netscape 公司與 Sun 公司(Java 語言的發明者和所有者)達成協議,後者允許將這種語言叫做 JavaScript。這樣一來,Netscape 公司可以藉助 Java 語言的聲勢,而 Sun 公司則將自己的影響力擴展到了瀏覽器。

之所以起這個名字,並不是因爲 JavaScript 本身與 Java 語言有多麼深的關係(事實上,兩者關係並不深,詳見下節),而是因爲 Netscape 公司已經決定,使用 Java 語言開發網絡應用程序,JavaScript 可以像膠水一樣,將各個部分連接起來。當然,後來的歷史是 Java 語言的瀏覽器插件失敗了,JavaScript 反而發揚光大。

1995年12月4日,Netscape 公司與 Sun 公司聯合發佈了 JavaScript 語言,對外宣傳 JavaScript 是 Java 的補充,屬於輕量級的 Java,專門用來操作網頁。

1996年3月,Navigator 2.0 瀏覽器正式內置了 JavaScript 腳本語言。

二、JavaScript 與 Java 的關係

這裏專門說一下 JavaScript 和 Java 的關係。它們是兩種不一樣的語言,但是彼此存在聯繫。

JavaScript 的基本語法和對象體系,是模仿 Java 而設計的。但是,JavaScript 沒有采用 Java 的靜態類型。正是因爲 JavaScript 與 Java 有很大的相似性,所以這門語言才從一開始的 LiveScript 改名爲 JavaScript。基本上,JavaScript 這個名字的原意是“很像Java的腳本語言”。

JavaScript 語言的函數是一種獨立的數據類型,以及採用基於原型對象(prototype)的繼承鏈。這是它與 Java 語法最大的兩點區別。JavaScript 語法要比 Java 自由得多。

另外,Java 語言需要編譯,而 JavaScript 語言則是運行時由解釋器直接執行。

總之,JavaScript 的原始設計目標是一種小型的、簡單的動態語言,與 Java 有足夠的相似性,使得使用者(尤其是 Java 程序員)可以快速上手。

三、JavaScript 與 ECMAScript 的關係

1996年8月,微軟模仿 JavaScript 開發了一種相近的語言,取名爲JScript(JavaScript 是 Netscape 的註冊商標,微軟不能用),首先內置於IE 3.0。Netscape 公司面臨喪失瀏覽器腳本語言的主導權的局面。

1996年11月,Netscape 公司決定將 JavaScript 提交給國際標準化組織 ECMA(European Computer Manufacturers Association),希望 JavaScript 能夠成爲國際標準,以此抵抗微軟。ECMA 的39號技術委員會(Technical Committee 39)負責制定和審覈這個標準,成員由業內的大公司派出的工程師組成,目前共25個人。該委員會定期開會,所有的郵件討論和會議記錄,都是公開的。

1997年7月,ECMA 組織發佈262號標準文件(ECMA-262)的第一版,規定了瀏覽器腳本語言的標準,並將這種語言稱爲 ECMAScript。這個版本就是 ECMAScript 1.0 版。之所以不叫 JavaScript,一方面是由於商標的關係,Java 是 Sun 公司的商標,根據一份授權協議,只有 Netscape 公司可以合法地使用 JavaScript 這個名字,且 JavaScript 已經被 Netscape 公司註冊爲商標,另一方面也是想體現這門語言的制定者是 ECMA,不是 Netscape,這樣有利於保證這門語言的開放性和中立性。因此,ECMAScript 和 JavaScript 的關係是,前者是後者的規格,後者是前者的一種實現。在日常場合,這兩個詞是可以互換的。

ECMAScript 只用來標準化 JavaScript 這種語言的基本語法結構,與部署環境相關的標準都由其他標準規定,比如 DOM 的標準就是由 W3C組織(World Wide Web Consortium)制定的。

ECMA-262 標準後來也被另一個國際標準化組織 ISO(International Organization for Standardization)批准,標準號是 ISO-16262。

四、JavaScript 的版本

1997年7月,ECMAScript 1.0發佈。

1998年6月,ECMAScript 2.0版發佈。

1999年12月,ECMAScript 3.0版發佈,成爲 JavaScript 的通行標準,得到了廣泛支持。

2007年10月,ECMAScript 4.0版草案發布,對3.0版做了大幅升級,預計次年8月發佈正式版本。草案發布後,由於4.0版的目標過於激進,各方對於是否通過這個標準,發生了嚴重分歧。以 Yahoo、Microsoft、Google 爲首的大公司,反對 JavaScript 的大幅升級,主張小幅改動;以 JavaScript 創造者 Brendan Eich 爲首的 Mozilla 公司,則堅持當前的草案。

2008年7月,由於對於下一個版本應該包括哪些功能,各方分歧太大,爭論過於激進,ECMA 開會決定,中止 ECMAScript 4.0 的開發(即廢除了這個版本),將其中涉及現有功能改善的一小部分,發佈爲 ECMAScript 3.1,而將其他激進的設想擴大範圍,放入以後的版本,由於會議的氣氛,該版本的項目代號起名爲 Harmony(和諧)。會後不久,ECMAScript 3.1 就改名爲 ECMAScript 5。

2009年12月,ECMAScript 5.0版 正式發佈。Harmony 項目則一分爲二,一些較爲可行的設想定名爲 JavaScript.next 繼續開發,後來演變成 ECMAScript 6;一些不是很成熟的設想,則被視爲 JavaScript.next.next,在更遠的將來再考慮推出。TC39 的總體考慮是,ECMAScript 5 與 ECMAScript 3 基本保持兼容,較大的語法修正和新功能加入,將由 JavaScript.next 完成。當時,JavaScript.next 指的是ECMAScript 6。第六版發佈以後,將指 ECMAScript 7。TC39 預計,ECMAScript 5 會在2013年的年中成爲 JavaScript 開發的主流標準,並在此後五年中一直保持這個位置。

2011年6月,ECMAScript 5.1版發佈,並且成爲 ISO 國際標準(ISO/IEC 16262:2011)。到了2012年底,所有主要瀏覽器都支持 ECMAScript 5.1版的全部功能。

2013年3月,ECMAScript 6 草案凍結,不再添加新功能。新的功能設想將被放到 ECMAScript 7。

2013年12月,ECMAScript 6 草案發布。然後是12個月的討論期,聽取各方反饋。

2015年6月,ECMAScript 6 正式發佈,並且更名爲“ECMAScript 2015”。這是因爲 TC39 委員會計劃,以後每年發佈一個 ECMAScript 的版本,下一個版本在2016年發佈,稱爲“ECMAScript 2016”,2017年發佈“ECMAScript 2017”,以此類推。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章