JavaScript 有著很奇怪的命名史。
人類歷史上的第一款商用瀏覽器
1995 年,它作為網景瀏覽器(Netscape Navigator)的一部分首次發布,網景給這個新語言命名為 LiveScript。
一年后Java出現了,為了搭上當時媒體熱炒 Java 的順風車,臨時改名為了 JavaScript (當然,Java 和 JavaScript 的關系,就和雷鋒和雷峰塔一樣 ,并沒有什么關系)
Netscape的管理層幾乎全部是Java的愛好者和信徒,他們想要一個看起來很像Java的膠水語言
1996 年,網景將 JavaScript 提交給 ECMA International(歐洲計算機制造商協會) 進行標準化,并最終確定出新的語言標準,它就是 ECMAScript。自此,ECMAScript 成為所有 JavaScript 實現的基礎,不過,由于 JavaScript 名字的歷史原因和市場原因(很顯然 ECMAScript 這個名字并不令人喜歡……),現實中我們只用 ECMAScript 稱呼標準,平時都還是使用 JavaScript 來稱呼這個語言。
ECMAScript就是標準(Standard): 用于定義與其他事物區別的一套規則
JavaScript就是實現(Implementation): 某個標準的具體實施/真實實踐
不過,JavaScript 開發者們并不怎么在乎這些,因為在誕生之后的 15 年里,ECMAScript 并沒有多少變化,而且現實中的很多實現都已經和標準大相徑庭。其實在第一版的 ECMAScript 發布后,很快又跟進發布了兩個版本,但是自從 1999 年 ECMAScript 3 發布后,十年內都沒有任何改動被成功添加到官方規范里。取而代之的,是各大瀏覽器廠商們爭先進行自己的語言拓展,web 開發者們別無選擇只能去嘗試并且支持這些 API。即使是在 2009 年 ECMAScript 5 發布之后,仍然用了數年這些新規范才得到了瀏覽器的廣泛支持,可是大部分開發者還是寫著 ECMAScript 3 風格的代碼,并不覺得有必要去了解這些規范。
到了 2012 年,事情突然開始有了轉變。大家開始推動停止對舊版本 IE 瀏覽器的支持,用 ECMAScript 5 (ES5) 風格來編寫代碼也變得更加可行。與此同時,一個新的 ECMAScript 規范也開始啟動。到了這時,大家開始逐漸習慣以對 ECMAScript 規范的版本支持程度來形容各種 JavaScript 實現。在正式被指名為 ECMAScript 第 6 版 (ES6) 之前,這個新的標準原本被稱為 ES.Harmony(和諧)。2015 年,負責制定 ECMAScript 規范草案的委員會 TC39 決定將定義新標準的制度改為一年一次,這意味著每個新特性一旦被批準就可以添加,而不像以往一樣,規范只有在整個草案完成,所有特性都沒問題后才能被定稿。因此,ECMAScript 第 6 版在六月份公布之前,又被重命名為了 ECMAScript 2015(ES2015)
目前,仍然有很多新的 JavaScript 特性或語法正在提議中,包括 decorators(裝飾者),async-await(async-await 異步編程模型) 和 static class properties(靜態類屬性)。它們通常被稱為 ES7,ES2016 或者 ES.Next 的特性,不過實際上它們只能被稱作提案或者說可能性,畢竟 ES2016 的規范還沒有完成,有可能全部都會引入,也有可能一個都沒有。
TC39 把一個提案分為 4 個階段,你可以在 Babel 的官網 上查看各個提案目前都在哪個階段了。
所以,我們該如何使用這一大堆術語呢?下面的列表或許能幫助到你:
- ECMAScript:一個由 ECMA International 進行標準化,TC39 委員會進行監督的語言。通常用于指代標準本身。
- JavaScript:ECMAScript 標準的各種實現的最常用稱呼。這個術語并不局限于某個特定版本的 ECMAScript 規范,并且可能被用于任何不同程度的任意版本的 ECMAScript 的實現。
- ECMAScript 5 (ES5):ECMAScript 的第五版修訂,于 2009 年完成標準化。這個規范在所有現代瀏覽器中都相當完全的實現了。
- ECMAScript 6 (ES6) / ECMAScript 2015 (ES2015):ECMAScript 的第六版修訂,于 2015 年完成標準化。這個標準被部分實現于大部分現代瀏覽器。可以查閱這張兼容性表來查看不同瀏覽器和工具的實現情況。
- ECMAScript 2016:預計的第七版 ECMAScript 修訂,計劃于明年夏季發布。這份規范具體將包含哪些特性還沒有最終確定
- ECMAScript Proposals:被考慮加入未來版本 ECMAScript 標準的特性與語法提案,他們需要經歷五個階段:Strawman(稻草人),Proposal(提議),Draft(草案),Candidate(候選)以及 Finished (完成)。
關于ES6
推薦:阮一峰《ECMAScript6入門》
http://es6.ruanyifeng.com
你必須掌握的ES6特性
- let與塊級作用域
- 模板字符串
- 箭頭函數
- Class基本用法和getter、setter
- 裝飾器Decorator的用法
- ES6的模塊化特性(特別注意import()這個異步加載方案,已經進入了候選階段)
在這整個專題中,將把目前的 ECMAScript 版本稱作 ES6(因為這是大部分開發者最習以為常的),把明年的規范稱作 ES2016(因為,與 ES6/ES2015 不同,這個名字將在整個標準化過程中沿用)并且將那些還沒有成為 ECMAScript 定稿或草案的未來語言概念稱為 ECMAScript 提案或者 JavaScript 提案。
以下內容是關于JavaScript之父的,有興趣可以看看
關于JavaScript之父
Eich的個人Blog
https://brendaneich.com/
Eich的演講
https://www.youtube.com/results?search_query=brendan+eich
Eich的小性格
Eich一點兒都不喜歡Java,他是函數式編程的忠實信徒。他只是為了完成公司的任務,于是花10天的時間發明了JavaScript!
10天發明JavaScript
- 借鑒C語言的基本語法
- 借鑒Java語言的數據類型和內存管理
- 借鑒Scheme語言,將函數提升到"第一等公民"(first class)的地位
- 借鑒Self語言,使用基于原型(prototype)的繼承機制
"與其說我愛Javascript,不如說我恨它。它是C語言和Self語言一夜情的 產物。十八世紀英國文學家約翰遜博士說得好:'它的優秀之處并非原創, 它的原創之處并不優秀。'(the part that is good is not original, and the part that is original is not good.)"