JavaScript起源於Netscape公司的LiveScript語言,這是一種基於對象和事件驅動的client腳本語言。最初的設計是爲了檢驗HTML表單輸入的正確性。html
早些年,JavaScript由於其複雜的文檔對象模型(DOM)、糟糕的實現和調試工具、不一致的瀏覽器實現而不受開發人員的待見。而隨着技術的發展, JavaScript變得愈來愈的強大、無缺。比方, Ajax技術可以建立更加迷人的Web應用,Node.js將JavaScript的應用範圍擴展到了server端。各類層出不窮的框架使得JavaScript的開發更加簡捷,尤爲是近幾年HTML5的出現,將 JavaScript提高到了史無前例的高度。前端
如今 JavaScript已經變成了Web開發必備的語言,甚至開始逐步向移動領域滲透。由於JavaScript的跨平臺特性,使得它在移動互聯網時代有更大的做爲。html5
凡是可以用 JavaScript 來寫的應用,終於都會用 JavaScript 來寫。
——Atwood定律(Jeff Atwood在2007年提出)
如今 JavaScript已經成爲了Web開發的「標配」語言,不管你喜不喜歡。在Web開發中。必然要涉及到JavaScript。JavaScript可以實現真正的「一次編寫,處處執行」。並可以控制所有常用的瀏覽器,所以。JavaScript還被稱做「Web的虛擬機」以及「Web上的彙編語言」。git
雖然如此。但是假設你還沒開始學習JavaScript,這也不影響你編寫Web應用。你全然可以用你喜歡的語言(Java、.NET、C/C++、Python、Ruby……)來編寫應用程序,而後將它們編譯爲JavaScript語言。而後再執行於瀏覽器上。github
假設你對JavaScript的語法不愜意,你也可以使用一些JavaScript的加強版語言。web
比方。假設你更喜歡經典的面向對象方式,並想要一些語法糖,那麼你可以試試CoffeeScript;假設你但願有一個更嚴格的類型系統,那麼你可能會發現Dart或TypeScript更有趣一些;假設你更喜歡函數式編程。那麼ClojureScript或Roy可以幫助你。typescript
雖然JavaScript名字中包括「Java」。實際上JavaScript和Java沒有不論什麼關係,僅僅是由於當時Java火得一塌糊塗,爲了藉助Java的名氣來推廣,就起名爲JavaScript了。django
各類強大的工具的出現,使得JavaScript代碼和Java代碼之間有了必定的聯繫,就是可以將Java代碼編譯爲JavaScript代碼,以便在瀏覽器中執行。固然,除了Java外。其它基於JVM的語言都可以如此作。編程
可以實現此類操做的工具例如如下。後端
C/C++如今也可以用來編寫Web應用程序,相同可以將它們編譯爲JavaScript。一些工具例如如下。
由於Emscripten可以將LLVM二進制代碼編譯成JavaScript。LLVM是一種很是流行的中間編譯格式,差點兒所有語言都有LLVM編譯器,所以Emscripten也可以做爲大部分語言轉換爲JavaScript的通用工具。
可以使用例如如下工具將Python代碼編譯爲JavaScript代碼。
在Ruby領域,有一個使用JavaScript實現的Ruby標準庫—— RubyJS,它實現了Ruby中的所有方法,如Array、Numbers、Time等。Ruby之父松本行弘稱「假設我必須編寫JavaScript代碼。我會使用RubyJS」。
另外,你也可以使用例如如下工具將Ruby代碼編譯爲JavaScript代碼。
你可以使用例如如下工具將C#、F#以及其它.NET代碼編譯爲JavaScript代碼。
你可以使用例如如下工具將Scala代碼編譯爲JavaScript代碼。
HTML5(HTML/JavaScript/CSS3技術組合)的最大對手就是Flash,雖然眼下Flash的市場份額還高居70%。但也不能否認。將來將是HTML5的天下。
就連Flash的開發商Adobe也開始擁抱HTML5,並公佈了Toolkit for CreateJS工具,方便Web開發人員將Flash轉換爲HTML5格式。
去年,Google曾公佈了一套基於網頁的的工具——Swiffy。在線就能夠將SWF格式的Flash文件轉化爲HTML5格式。
除了轉換外,Mozilla還推出了一個新的解決方式——Shumway,這是一個「基於JavaScript的Flash虛擬機和執行時」,目的是在瀏覽器中構建一個可靠有效的SWF(Flash文件格式)渲染器,無需插件直接在瀏覽器中執行Flash。
因而可知。這些工具將進一步加速HTML5代替Flash的步伐。
由於是交叉編譯。致使輸出的代碼很是難被跟蹤調試。
一些工具在編譯的過程當中會生成映射文件(將編譯後的JavaScript代碼映射到源語言)。可以經過這些文件來進行調試。
由於 JavaScript在瀏覽器中執行問題,本地代碼編譯爲JavaScript後的執行速度可能會降低。
對於此類問題。Mozilla給出了一個解決方式—— asm.js(見《 asm.js:JavaScript的「彙編語言」》)。asm.js是一個JavaScript的一個嚴格的子集,提供了一個相似於C/C++虛擬機的抽象實現,包含一個可有效負載和存儲的大型二進制堆、整型和浮點運算、高階函數定義、函數指針等,可以被用來做爲一個底層的、高效的編譯器目標語言。
此外,還可以使用Mozilla開發的 JavaScript引擎OdinMonkey來得到更快的運行速度。開發人員可以將編寫的代碼編譯爲JavaScript,而後手動編寫爲asm.js代碼。當瀏覽器運行該程序時,OdinMonkey引擎會讓程序的運行速度更接近於本地應用。Mozilla將來可能會開發一些工具(相似於LLJS)來本身主動生成asm.js代碼。
隨着技術的發展,將來JavaScript或許會跑得和native C同樣快。
2012年。Mozilla曾推出一款Web版的第一人稱射擊遊戲演示BananaBread,今年5月份。Mozilla宣佈與Epic Games合做將虛幻引擎3(C/C++實現)移植到瀏覽器上。並公佈了基於虛幻引擎3的HTML5演示遊戲Epic Citadel,這些遊戲都是基於WebGL、 Emscripten和高性能的JavaScript子集asm.js實現。又一次定義了3D遊戲在瀏覽器中執行的性能,展現了高端遊戲也可以很是easy地移植到JavaScript 和 WebGL平臺,同一時候不失性能和畫面效果。
Mozilla的還有一款支持多人在線的HTML5 遊戲—— BrowserQuest。
隨着HTML5新特性Full Screen API、Gamepad API和Mouse Lock API的無缺,瀏覽器或將成爲將來遊戲的新戰場。
JavaScript大量的擴展,在很是大程度上彌補了JavaScript某些方面特性的不足。比方你可以使用例如如下這些工具或擴展來讓JavaScript更強大。
JavaScript如今在Web開發界的地位沒法撼動,但是仍不斷有一些新的語言出現。但願能夠經過提供更強大、更無缺、更優雅的特性來取代JavaScript。
不少其它工具可參見: http://altjs.org/
差點兒所有主流的語言都可以編譯爲JavaScript。進而可以在所有平臺上的瀏覽器中運行,這也體現了JavaScript的強大性和在Web開發中的重要性。此外,互聯網中還存在大量的工具,使得這些語言可以與 JavaScript進行互操做,咱們將在之後的文章中具體介紹。
以上這些工具中,大部分都是開源項目,假設感興趣,你也可以經過源代碼來了解這些語言之間進行轉換的相關原理和技術。
做者:王果 (本文最先於2013年11月發表於CSDN資訊頭條)