解密!编程语言林林种,为何还用JavaScript?

举报
竹叶青 发表于 2020/02/17 17:16:02 2020/02/17
【摘要】 现在已经有许多种编程语言了,为什么还要用JavaScript呢?下面从7个方面来讲述如何选择一门编程语言及如何评判JavaScript的整体表现。 JavaScript可以自由使用吗?JavaScript可以说是最开放的编程语言:ECMA-262,JavaScript语言的规范,它是一个ISO标准,有着许多独立的实现,其中一些是开源的。此外,该语言是由TC39演变而来,TC39是一个由几家公...

现在已经有许多种编程语言了,为什么还要用JavaScript呢?下面从7个方面来讲述如何选择一门编程语言及如何评判JavaScript的整体表现。


 JavaScript可以自由使用吗?


JavaScript可以说是最开放的编程语言:ECMA-262,JavaScript语言的规范,它是一个ISO标准,有着许多独立的实现,其中一些是开源的。此外,该语言是由TC39演变而来,TC39是一个由几家公司组成的委员会,包括所有主要的浏览器厂商。这些公司通常都是竞争对手,但是却能为JavaScript语言的福祉而一起工作。



  JavaScript是一门优雅的编程语言吗?


这很难说,我使用过几种语言,写过许多不同范式的等价代码。因此,我很清楚JavaScript并非那么极致的优雅。然而,它是一种非常灵活的语言,拥有一颗相当优雅的内核,并且能够让你使用面向对象和函数式编程的混合方式。

JavaScript引擎之间的语言兼容性往往会是一个问题,但如今不再是了,这一定程度上要感谢test262套件(https://github.com/tc39/test262),它可以用于检查引擎是否遵循ECMAScript规范。相反,浏览器和DOM的差异仍然是一个挑战。这也是为什么我们通常会借助于框架来隐藏这些差异的原因。



   JavaScript有用吗?



如果它不能让你写出你想要的程序,那么哪怕它是世界上最漂亮的程序语言都没有任何用处。

1. 图形用户界面

在图形用户界面方面,JavaScript受益于它已成为HTML5的一部分。我用HTML5这个术语来表示“跨浏览器平台”(HTML、CSS,以及浏览器JavaScript API)。HTML5现被广泛部署并且仍在不断地进步,它正逐渐变成完善的一层,能够写出功能完备的、跨浏览器的应用;类似于Java平台,它就像是一个嵌入式的操作系统。HTML5的一个卖点是允许你编写跨平台的图形用户界面。当然,这总会有一些妥协:通过放弃一定的质量要求换取不仅限于单一的操作系统。在过去,“跨平台”意味着Windows、Mac OS,或者Linux。但是现在我们又有了两个交互平台:Web以及mobile。通过HTML5,你可以通过使用诸如PhoneGap、Chrome Apps(http://developer.chrome.com/apps/)、以及TideSDK(http://www.tidesdk.org/)等这些技术去触及所有的平台。

另外,有些平台拥有和原生应用一样的Web应用,或者可以让你将它们安装到本地,例如Chrome OS、Firefox OS以及Android。

2. 其他技术补充完善JavaScript

有更多不是HTML5的技术对JavaScript进行着有效的补充,使得该语言变得更为实用。

(1)类库

JavaScript有大量的类库,从解析JavaScript(通过Esprima(http://esprima.org))到处理和显示PDF文件(通过PDF.js(https://github.com/mozilla/pdf.js))等,足以让你完成任务。

(2)Node.js(http://nodejs.org

Node.js平台允许你编写服务端代码以及Shell脚本(如构建工具、测试执行等)。

(3)JSON (JavaScript对象表示法, 参见第22章

JSON是一种基于JavaScript的数据格式,已经成为网络上流行的数据交换格式(如Web服务的结果)。

(4)NoSQL数据库 (诸如CouchDB[http://couchdb.apache.org]以及MongoDB[http://www.mongodb.org])

这些数据库和JSON以及JavaScript紧密相连。


 JavaScript有什么好用的工具?


JavaScript正在具备越来越好的构建工具(如Grunt[http://gruntjs.com])和测试工具(如mocha[http://visionmedia.github.io/mocha/])。Node.js使得我们可以通过Shell(不仅仅是通过浏览器)来运行这些工具。这一领域存在一个风险就是碎片化,现在正日渐出现太多类似的工具。

JavaScript IDE的空间仍处于较为初级的阶段,但是发展迅速。Web开发的复杂性和活力为它带来创新的沃土。两个开源的例子是Brackets(http://brackets.io)和Light Table(http://www.lighttable.com)。

此外,浏览器也越来越具备开发的环境。如Chrome,尤其是在最近取得了令人印象深刻的进步。看着许多IDE和浏览器未来将整合在一起,这将非常有趣。



 JavaScript在处理你要做的事情时够快吗?



JavaScript引擎已经取得了极大的进步,旧的编译器进化成了实时的编译器。绝大多数的应用程序现在已经运行得足够快了。况且,新的想法也正在开发中,它们都为了让未来应用里的JavaScript程序可以执行得足够快。

asm.js(http://asmjs.org/)是一个JavaScript(非常稳定)的子集,它在当前的引擎上跑得很快,具备C++编译过的程序的70%的性能。例如,它可以用于实现Web应用程序中性能至上的算法部分,也可以用于将基于C++的游戏移植到Web平台。

ParallelJS(http://www.2ality.com/2013/12/paralleljs.html)使用和JavaScript截然不同的代码,使用新的数组方法mapPar, filterPar,以及reducePar(JavaScript对于已经存在的数组平行版本方法是map、filter,以及reduce)。为了使其并行工作,回调函数必须写成指定的格式;主要的限制是你不能够改变那些回调中创建的数据。



  JavaScript是广泛使用的吗?



一门被广泛使用的语言通常有两个好处。首先,这门语言有更好的文档和支持。其次,越来越多的程序员了解它,这点非常重要,不论你是想要雇用别人还是销售基于这门语言的工具。

JavaScript被广泛使用,且获得了以下两个好处。

  • JavaScript相关的文档和各式各样的支持:书籍、播客、博客、电子邮件时事通信、论坛等。

  • JavaScript开发人员需求量很大,尽管他们的排名也不断在增加。



 JavaScript有前途吗?



有几件事表明JavaScript有一个光明的未来。

语言是稳步发展的;ECMAScript 6看起来不错。

有许多JavaScript相关的创新(例如,上述提到的asm.js和ParallelJS,微软出品的TypeScript等)。

JavaScript的网络平台是一个必需的组成部分,正在迅速成熟。

JavaScript是被联盟广泛支持的,而不是被单独的人或者公司控制。




以上内容节选自《深入理解JavaScript》

相关本书评论:

这是一本为刚接触编程的程序员写的最简洁完整的JavaScript书籍。

                                                     ——Cody Lindley, 前端工程师,《JavaScript启示录》一书作者

这是一本非常棒的书,极易理解。对Web开发新人和高手来说都是必备读物。

                                                                                   —— Ariya Hidayat, Shape Security工程总监



喜欢,又或是不喜欢,JavaScript都在那里,日夜相随,不离不弃。JavaScript正越来越多地出现在我们的生活中,从浏览器到服务端,再到移动端。想要学习这种语言,或者深入了解一些你没有涉足的内容,本书正是你的最佳选择,它既可以指引入门也能够带你深入JavaScript。作者是一位资深的程序员,也曾在相同的处境中暮然回首,找到了真实的自己。

作者


Dr.Axel Rauschmayer 专攻JavaScript和Web开发领域。他在2ality.com写博客,教Ecmanauten,编辑JavaScript Weekly周刊,组织MunichJS用户组。Axel从1985年开始编程,1995年开始开发Web应用。


译者们


  


  • 王玉林        

  • 花名:小飞

  • 微博:@非常长

  • 魔筷科技创始人,原阿里巴巴资深前端工程师,原阿里花名“飞长”。喜欢安静地写代码,同时也愿意从商业角度做一点点思考,努力做一些可能很微小,但对这个世界有那么点意义和价值的事。目前魔筷科技正专注于提供完整的移动电商解决方案。



  • 杜欢

  • 花名:风驰

  • 邮箱:fengchi.dh@taobao.com

  • 淘宝高级技术专家,专注Web产品设计、整体架构和可用性实施,热爱标准化。



  • 庄婷婷

  • 花名:紫溪

  • 邮箱:sleep.ztt@gmail.com

  • 阿里前端工程师,在前端开发方面积累了多年经验。闲暇时喜欢旅行、阅读,偶尔翻译点技术文章,不断探寻有趣的事。



  • 章子鹏

  • 花名:乔福

  • 微博:@请强刷五次

  • 一名普通的前端开发工程师,就职于淘宝用户体验部。以前的愿望是期望国内的IE6份额不断降低,现在力求利用丰富的Web技术构建优秀的用户体验的产品。在业余时间会做一些翻译,捣鼓前端技术、Linux和Shell等。目前在学习iOS和日语。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200