什么是ECMAScript、什么又是ECMA?
Ecma國際(Ecma International)是一家國際性會員制度的信息和電信標准組織。1994年之前,名為歐洲計算機制造商協會(European Computer Manufacturers Association)。因為計算機的國際化,組織的標准牽涉到很多其他國家,因此組織決定改名表明其國際性。現名稱已不屬於首字母縮略字。
ECMAScript是一種由Ecma國際(前身為歐洲計算機制造商協會,英文名稱是European Computer Manufacturers Association)通過ECMA-262標准化的腳本程序設計語言。這種語言在萬維網上應用廣泛,它往往被稱為JavaScript或JScript,但實際上后兩者是ECMA-262標准的實現和擴展。
ECMAScript和JavaScript到底是什么關系?
很多初學者會感到困惑,簡單來說,ECMAScript是JavaScript語言的國際標准,JavaScript是ECMAScript的實現。
什么是ECMAScript5,什么是ECMAScript6呢?
有人總認為ECMAScript5就是所謂的ECMAScript2015(是因為都有個5么?),其實是不對了,早在2009年12月份ECMA公司就發布了ECMAScript5。
而我們所說的ECMAScript6是2015年6月份發布的,是JavaScript語言的下一代標准,官方稱ECMAScript2015,Mozilla公司將在這個標准的基礎上,推出JavaScript 2.0。
ECMAScript6 是繼ECMAScript5之后的一次主要改進,語言規范由ES5.1時代的245頁擴充至600頁。ECMAScript6的目標是使得 JavaScript語言可以用來編寫大型的復雜的應用程序,成為企業級開發語言。ECMAScript6增添了許多必要的特性,例如:模塊和類,以及一 些實用特性,例如Maps、Sets、Promises、生成器(Generators)等。盡管ECMAScript6做了大量的更新,但是它依舊完全 向后兼容以前的版本,標准化委員會決定避免由不兼容版本語言導致的“web體驗破碎”。結果是,所有老代碼都可以正常運行,整個過渡也顯得更為平滑,但隨 之而來的問題是,開發者們抱怨了多年的老問題依然存在。
令人不爽的是目前沒有一款完全支持ES6的JavaScript代理(無論是瀏覽器環境還是服務器環境),所以我們真正使用ECMAScript6開發者需要將ECMAScript6代碼轉譯為ECMAScript5代碼。
什么是TypeScript?
TypeScript是一種由微軟開發的自由和開源的編程語言。注意:官方給出的解釋TypeScript是一種編程語言,請大家記住了。
它是JavaScript的一個超集,而且本質上向這個語言添加了可選的靜態類型和基於類的面向對象編程。TypeScript擴展了JavaScript的 語法,所以任何現有的JavaScript程序可以不加改變的在TypeScript下工作。TypeScript是為大型應用之開發而設計,而編譯時它 產生 JavaScript 以確保兼容性。它與JavaScript相比進步的地方包括:加入注釋,讓編譯器理解所支持的對象和函數,編譯器會移除注釋,不會增加開銷。 而JavaScript只是一個腳本語言,並非設計用於開發大型 Web 應用,JavaScript 沒有提供類和模塊的概念,而TypeScript擴展實現了這些特性。
TypeScript 最大的特點就是類型化,因此才叫做TypeScript。比起弱類型的JavaScript,類型化的TypeScript顯得更加容易維護。
這 里少插一句,有人認為TypeScript有一個優點就是要經過TSC編譯,他在編譯期能夠知道一些錯誤,這個難道算優點嗎?我竟無言以對,不管是使用 TSC進行監聽編譯,還是手動觸發命令編譯,還是通過寫Gulp腳本編譯,其過程讓人難以忍受(因為TSC和Ionic2提供的Gulp腳本我都使用 過),比如說你正在寫一個Class,寫完之后想馬上看到效果,這個時候你發現你的CLI正在拼命地編譯,好的時候會在3秒左右你能看到頁面效果,設想一 下,如果工程更巨大,你覺得編譯工程需要多久呢?
TypeScript要經過TSC編譯並不是它的優勢,如果讓微軟選擇它寧願所有的宿主環境能夠直接運行它,編譯期間能夠檢查的錯誤無非是語法與依賴之類 的錯誤,不代表真正運行的時候沒有錯誤,我曾很多次在編譯器無錯誤,在運行期間出現很多錯誤,這取決於你使用框架的機制和你業務邏輯的實現,如同你使用 servlet寫服務一樣,編譯期間沒錯就一定代表運行時不會出異常么?兩者其實沒有可比性,其實要經過TSC編譯恰恰是TypeSciprt的一個缺 點,在開發過程中反而給我們帶來很多不便。
TypeScript和ECMAScript6的區別?
首 先我們都期望現在的宿主環境都能夠直接運行ECMAScript6,我還沒見過哪個人說期望瀏覽器直接能夠運行TypeScript,因為畢竟 EXMAScript6是一個標准,而Typescript實現了ECMAScript6的特性,並且在此之上有進行擴展,也就是說Typescript 有些特性並不是ECMAScript6的規范,哪說兩個是一個東西其實是不對的,只能說明他們有些寫法是相同的不代表是一個東西。正因為目前而言我們現在 的宿主環境都無法直接運行TypeScript和ECMAScript6,所以兩者都需要進行編譯器編譯,並且目標語言都是Javascript,在我們 編寫Typescript的時候是可以使用javascript的,在我看來編譯器大不了不編譯那段javascript的代碼對吧!所以說我們在寫 Typescript的時候其實是可以寫ECMAScript6的,原因非常簡單你會使用TSC進行編譯,那么你設想一下你寫Typescript卻是用 ECMA6的標准去編譯,行么?現在你還認為兩者是一個東西么?
如果你還不理解我就只能上代碼了,比如我們現在定義一個類:
使用ECMAScript6:
那么我們使用TypeScript寫呢:
甚至我們為了方便,也可以寫成
好了,今天有些晚了,一會還要洗衣服了,今天就說到這里,具體還需要小伙伴們看文檔,因為沒有什么比文檔更權威的。下面是相關的網站,大家可以看一下:
ECMA6:http://www.ecma-international.org/ecma-262/6.0/
Typescript:https://www.typescriptlang.org/
請持續關注我的系列文章,Ionic2開發指南與Angular2開發實戰。