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资讯头条)