HTML5资讯

当前位置: HTML5技术网 > HTML5资讯 > 重思JavaScript的好与坏

重思JavaScript的好与坏

        最近,我和许多程序员一样,对JavaScript进行重新探讨。事实上,JavaScript是一个非常有能力的语言,但使用新JavaScript一年后,我得出的结论却是JavaScript仍然很烂。我并不是在讨论其古怪的比较运算。而是从更深的层次去思考。与此同时,还会提供一些解决方案供你选择。



直奔主题


      13岁时,父亲送给我第一本编程书籍——JavaScript初学者编程。让我兴奋的是,我发现电脑并不单单是由电线和发条所组成,里面的代码清晰明了。我觉得我基本上理解它了,实际上也差不多。终究,代码除了人类理性思想的形式化还能是什么?


      说实话,我当时希望遇到的是Java,我甚至在谷歌上搜索:“JavaScript和Java是同一种语言吗?”当然不是。所以Java成为了我学习的第二门语言,不过我母亲和继父不希望在家庭电脑里安装软件,所以我无法安装Java编译器。我清晰地记得,在把代码上传到一个在线编译器之前,得反复检查代码,然后等待、下载jar包……


       我当时认为,JavaScript是一个非常严肃的语言。在Notepad里新建一个HTML文件,然后在IE里打开,就这样开始了。没有类、没有私有和公有方法,没有final变量。当时,我甚至不知道什么叫“过度设计”,但它准确地描述了我印象中的Java:


  • 无需编译
  • 无处不在的开发平台
  • 没有高级语言特性
  • 查看源文件


为什么这么伟大的语言还会讨人厌?


Ad-hoc地狱


       下面是一些问题:设计之匆忙、初衷仅仅实现简单的网页互动、JavaScript继承完全缺乏设计指导,一切都是ad-hoc:


  1. 没有OOP:JavaScript确实存在基本的对象模型,但几乎无人知道它是如何工作的。
  2. 没有标准库:从论坛上复制粘贴代码不好玩。
  3. 没有模块系统:不断查找下载链接和很长的源文件。
  4. 缺乏语言资源:没有高品质的资源(几乎没有一本像样的书籍)意味着你只能从论坛或博客上获得一些非官方的参考。


既然JavaScript有这么多缺陷,到底是什么让它如此流行?


复兴


        JavaScript崛起的背后可能与谷歌V8引擎息息相关。JavaScript突然变得很快,真正地快速。所以人们开始硬着头皮使用它来编写Web应用程序。


       然而,Node.js推出了一些更吸引人的基准,允许代码在客户端和服务器端重用,很像Meteor和Derby。因此,情况开始好转:


  1. 下载按钮变得更大
  2. Node.js kind of sort of standardized an import system
  3. 人们可以编写更好的库
  4. 优秀的资源开始出现


然而:


  1. 仍然没有采用OOP
  2. 客户端和服务端的JavaScript仍然没有关联
  3. 文档甚至是高知名度项目文档也很糟糕


为什么?


       我认为现代JavaScript仍然较烂的根源是其处在一个特定的社区氛围中,该氛围一直强调:JavaScript是一门非常好的语言,但却一直被人误解。不,JavaScript只是一个提早诞生且没有先例可循的语言。停止包庇并且开始把JavaScript作为一个平台去拥抱,作为一个编译目标。


文档


       人们可以尽情嘲笑Java,但当我看Java文档时,我可以非常明确地知道哪个对象可以创建、每个方法里的参数、需要抛出的异常等。最好的事情莫过于使用JavaScript库作为精选示例代码。这几乎是不可能写出正确的软件,除非你阅读库源码。甚至连如此完整的JavaScript项目Express也存在令人生厌的API文档(Ember他们那些非常优秀的API文档可能是反例)。


语法糖


       JavaScript社区很快就抛弃了语法糖。语法糖是极富创造力的。将重复逻辑代码抽象出来,可以通用,帮助程序员以更好的方式编写代码。


  • 让代码更加简洁
  • 有助于表达代码背后的意思,而不是算法。我已经知道了数组迭代算法,好吧,谢谢你,但是请你不要告诉我这些,我只想知道你要做的东西。


        作为一名编码人员,你的主要观众不是电脑,而是其他程序员,也包括将来的自己。书写冗长的for循环很爽,但说实话,for (var i=0; i


JSLint


       如果程序员使用JavaScript尚未感到痛苦,那JSLint成功做到了这点,而且非常“成功”! 想象一下,在某个编码的新兵训练营里,想要对JavaScript进行尴尬的惩罚,然后在其身上进行拔毛,这好比是拿着牙刷在刷厕所。事实上,我宁愿从牦牛身上拔毛。这是原文中的例子,小编的理解是JSLint的出现是给JavaScript挑刺的,而这样还不如直接在JavaScript身上拔毛。



       更值得注意地是,作为程序员,我们应该寻找自动化,难道你不希望自己可以自动化JSLint吗?当然,你可以。CoffeeScript可以完美的生成linted代码,正如Jeremy。


OOP


       JavaScript对象模型还是不够成熟,原型(Prototype)继承是一个低级别的功能,可以创建一些非常有意义的对象模型,但却无法基于本身进行构建。


      这也可能是JavaScript API为什么会那么糟糕的原因,当你所使用的语言甚至没有类时,该如何记录面向对象代码呢? 最重要的是,当我们甚至不知道实例化对象时,JavaScript开发人员该如何实行互操作?


有什么可选项吗?

       年复一年,笔记本逐步成为主流、政坛也发生了不少的变化,而JavaScript仍然保持不变。你愿意等一些基本特性多少年?在这篇悲观论调的文章里,让我们先看看下面这个列表:


  1. Mozilla发布了自己JavaScript1.7或1.8,前者是在6年半之前发布的,且不向后兼容,但并无人使用且永远不会有,同样也适用于后者。
  2. ECMAScript Harmony。最近,由于设计委员会的原因,发布新版ECMAScript将会有一个极其缓慢和痛苦的过渡过程,特别是它有一些特效是与JavaScript不兼容的。没有解决方案,除非你愿意再等数十年。


下面列出一些可选项


  1. CoffeeScript语法非常漂亮且支持类。我认为CoffeeScript并未结束,只不过是刚刚华丽地开启。
  2. TypeScript一种编译到JavaScript的语言,可以在JavaScript中构建并且添加了静态类型。个人而言,我是它的大粉丝。正如Mohamed Mansour和Dave Hodder在评论中指出的那样,TypeScript正在进一步实施ECMAScript的一些建议,也许ECMAScript最终会从TypeScript中借鉴可选的静态类型。
  3. Google Dart一个全新的语言,附带JavaScript编译器和一些JavaScript互操作,但整体上并未整合到JavaScript生态系统中。
  4. HaXe这是一个高级语言,可以编译JavaScript、Flash、NekoVM、PHP、C++、C#和Java(不久后),虽然我从未使用过,但它真的令人印象深刻。


总结


       最后,我敢押注,最终的获胜者肯定是编译为JavaScript的语言。虽然我们还没真正准备好这样的过渡,但是所取得的进展仍是有目共睹的。尽管也存在些偏离,但他们正在替未来的Web发展铺平道路。不管最终哪门语言会胜出,我都想强调一下我的主要观点:JavaScript目前仍然存在许多不足,我们需要拥抱一个新语言并且推进它。


来自:Why JavaScript Still Sucks


编译:CSDN

【重思JavaScript的好与坏】相关文章

1. 重思JavaScript的好与坏

2. RapydScript:将特定代码转换成JavaScript的预编译器

3. HTML5大调查:做的好,收入不比iOS差

4. CodeMirror:基于JavaScript的代码编辑器

5. 基于HTML5和Javascript的移动应用架构

6. SVG.js:基于JavaScript的SVG操作库

7. Squel.js: 基于JavaScript的SQL查询构建器

8. JavaScript的4种调用函数的方法

9. PhysicsJS:基于JavaScript的强大的物理引擎

10. Asm.js: Javascript的编译目标

本文来源:https://www.51html5.com/a3056.html

点击展开全部

﹝重思JavaScript的好与坏﹞相关内容

「重思JavaScript的好与坏」相关专题

其它栏目

也许您还喜欢