JavaScript:世界上误解最深的语言

转载 2007年09月29日 13:24:00

JavaScript, 亦称为 Mocha、LiveScript,也叫做JScript ECMAScript,是世界上流行的编程语言之一。事实上世界上差不多每台个人电脑都至少安装了一个JavaScript解释器。JavaScript的流行完全在于它作为WWW的脚本语言的角色。

不管它有多么流行,极少有人了解JavaScript是一个十分动态的通用面向对象编程语言。这怎能成为一个秘密呢?为什么这个语言如此被误解?

关于名字

这个Java-前缀暗示了JavaScript和Java的关系,也就是JavaScipt是Java的一个子集也就是不如Java强大。看上去这个名称就故意制造混乱,然后随之而来的是误解。JavaScript并不是解释型的Java语言。Java是解释型的Java,JavaScript是另一种语言。

JavaScript和Java的语法很相似,就象Java和C的语法相似一样。但它也不是Java的子集就像Java也不是C的子集一样。在应用上,Java要远比原先设想的好得多(Java原称Oak)。

JavaScript并不是由Sun公司──Java的老家──开发的。JavaScript是由Netscape公司开发。它本来叫做LiveScript,这个名字并不是那样容易混淆。

这个-Script 后缀暗示了它不是一个真正的编程语言──脚本语言好象不是真正的编程语言。但其实这是一个专长的问题。相对C而言,JavaScript牺牲性能但带来更强的表达力和动态性。

披着C外衣的Lisp

JavaScript的C风格的语法,包括大括号和复杂的for 语句,让它看起来好象是一个普通的过程式语言。这是一个误导因为JavaScript和函数式语言如Lisp和Scheme有更多的共同之处。它用数组代替了列表,用对象代替了属性列表。函数是第一型的。而且有闭包。你不需要平衡那些括号就可以用lambda算子。

思维定势

JavaScript是原被设计在Netscape Navigator 中运行的。它的成功让它成为几乎所有浏览器的标准配置。这导致了思维定势。JavaScript简直就是程序语言中的George Reeves (一位曾扮演超人的演员,但后来死于枪杀,被官方认为自杀,细节不详──译注)。其实,JavaScript也适合很多和Web无关的应用程序。

不断改变的目标

JavaScript的第一个版本功能十分弱。它缺少异常处理、内部函数和继承。而它的现在的形态,它已经是一套完整的面向对象语言。但很多看法都是基于认为它的形式不成熟。

管理这个语言的ECMA委员正在开发扩展 ,原意是很好,而这样却会加剧这个语言最严重的问题:版本太多了。这也造成了混淆。

设计错误

没有什么编程语言是完美的,JavaScript也有它的设计上的错误,如的重载同时表示加和带类型转换的串连接,和有错误倾向的 with 语句应该避免使用。保留字策略过于严格。分号的加入是一个很大的错误,正则表达式的记号也是。这些错误会导致编程错误,并把语言的设计作为整个叫做问题。幸运的是,这些问题可以用一个很好lint程序来避免。

这个语言的设计从整体上看还是十分健全的。但很令人惊讶的是, ECMAScript委员会好象根本不想修正这些错误。也许他们对重新制作一个更感兴趣。

肮脏的实现

JavaScript早期实现错误百出。这对该语言带来了很恶劣的影响。更糟糕的是,这些实现还被嵌入的更错误百出的浏览器中。

拙劣的书籍

几乎所有的书籍都十分恐怖。里面到处是错误、蹩脚的例子还自创一套拙劣的惯例。语言中重要的特性却常常解释不好,或者干脆完全不写。我翻阅了几十本JavaScript的书,我只推荐两本:JavaScript: The Definitive Guide (4th Edition) by David Flanagan and Dynamic HTML (2nd Edition) by Danny Goodman. 都来自于 O'Reilly.

不够标准的标准

该语言的官方标准规格说明书由ECMA发布。该规格书也是质量奇差。它难以阅读也难以理解。它也对拙劣书籍的问题作出了自己的一份“贡献”,因为作者无法使用这个标准文档来增加他们对语言的认识。ECMA和TC39委员会应该为此感到深深的羞愧。

业余爱好者

大部分写JavaScript的人都不是程序员。他们缺乏训练写好程序的修养。JavaScript有如此丰富的表达能力,他们可以任意用它来写代码,以任何形式。这给JavaScript带来了一个名声──它是专门为外行设计的,不适合专业的程序员。这显然不是事实。

面向对象

JavaScript是不是面向对象的?它拥有对象,可以包含数据和处理数据的方法。对象可以包含其它对象。它没有类,但它却有构造器可以做类能做的事,包括扮演类变量和方法的容器的角色。它没有基于类的继承,但它有基于原型的继承。

两个建立对象系统的方法是通过继承(是一个……)和通过聚合(有一个……)。JavaScript两个都有,但它的动态性质让它可以在聚合上超越。

一些批评说JavaScript不是真正面向对象的因为它不能提供信息的隐藏。也就是,对象不能有私有变量和私有方法:所有的成员都是公共的。S

但又有证明了JavaScript对象可以拥有私有变量和私有方法。当然,极少有人认识到,因为JavaScript是世界是最受误解的程序嘛!

另外还有批评说JavaScript不能提供继承,这里证明了JavaScript不仅能支持传统的继承还能应用其它的代码复用模式

原文地址:JavaScript: The Wrrrld's Most Misunderstood Programming Language

翻译:ShiningRay    http://www.nirvanastudio.org/

<script type="text/javascript"><!-- google_ad_client = "pub-5858461870977086"; google_ad_width = 336; google_ad_height = 280; google_ad_format = "336x280_as"; google_ad_type = "text"; google_ad_channel = ""; google_color_border = "FBFDFF"; google_color_bg = "FBFDFF"; google_color_link = "105CB6"; google_color_text = "333333"; google_color_url = "999999"; //--> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script> <iframe name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-5858461870977086&amp;dt=1191043377546&amp;lmt=1191043377&amp;format=336x280_as&amp;output=html&amp;correlator=1191043376796&amp;url=http%3A%2F%2Fjavascript.chinahtml.com%2F2007%2F118900507615909.shtml&amp;color_bg=FBFDFF&amp;color_text=333333&amp;color_link=105CB6&amp;color_url=999999&amp;color_border=FBFDFF&amp;ad_type=text&amp;ref=http%3A%2F%2Fwebdesign.chinahtml.com%2F&amp;cc=100&amp;ga_vid=155544842.1191042859&amp;ga_sid=1191042859&amp;ga_hid=1140092224&amp;ga_fc=true&amp;flash=9&amp;u_h=768&amp;u_w=1024&amp;u_ah=738&amp;u_aw=1024&amp;u_cd=16&amp;u_tz=480&amp;u_his=1&amp;u_java=true" frameborder="0" width="336" scrolling="no" height="280" allowtransparency="allowtransparency"></iframe>
 

相关文章推荐

JavaScript: 世界上最被误解的语言|Douglas Crockford

这篇文章是javascript大牛Douglas Crockford 写的,实习的时候曾读过,现在再读,又有了不同的理解,特此转载。 原文地址:JavaScript: The Wrrrld's Mo...

被误解最深的史玉柱 拧巴着“出世”

[导读 ]一个屡出奇招的符号式人物应该如何进退于生意和生活,才能获得某种精确的平衡,既不会以败局收场,又不会终生沦为商业的奴隶?“我动作慢,别玩儿这个了。”他拿起那把著名的茶壶,又点了根烟,定定地看...
  • wkyb608
  • wkyb608
  • 2011年04月13日 13:14
  • 1716

PHP是世界上最好的语言

1.认识PHP代码标识想在页面中编写PHP​代码非常容易,如下面代码:就像你可以编写JavaScript脚本语言需要写在标签之间一样,你可以在页面中编写PHP代码写在标签之间,但注意后面的?>是可以省...

世界上的程序语言已经这么多了,为什么还不够?

程序语千百种,想要学 Coding 就必须先确定你的目的是什么,有的是拿来写 App 的,有的是专写操作系统,有的则是拿来写网页的 …… 各种不同的目的都有其最适合的语言。 ...

TIOBE2017榜单公布_PHP还会是世界上最好的语言吗?

TIOBE 2017最新编程榜单 第1:java,第2:C,第3:C++....第6:php 看到这个榜单,我的记忆瞬间回到了十年前。 那时我结识了原配asp,asp代码真的好简单啊,看了遍《...

用Visual Studio Code Debug世界上最好的语言

前言这阵子因缘巧合接手了一个辣鸡项目,是用世界上最好的拍黄片写的,项目基本是另一个小伙伴在撸码,我就兼职打杂和发布做点运维的工作。然后昨天项目上了测试版之后,一用起来Error满天飞了。让小伙伴查了很...

联合国公布世界上最难学的十大语言

发音优美的语言 在国际语言学界,日语,意大利语和西班牙语,是三个公认的发音优美的语言,其中,日语更是排在第一位。在语言学上,评价一种语言的发音是否 优美,有一个公认的标准,那就是辅音数量和元音数...

[从头读历史] 第281节 始制文字 世界上的语系及语言

剧情提要: 春秋时期,中华混沌帝国一片兴旺发达的景象,但这在厄尔斯星球上并不是孤例。 那么在那个时期,星球各地的人们用什么语言在交流呢?他们的文字又是怎样的呢? 正剧开始: 星历2016年...

hdu4515 小Q系列故事——世界上最遥远的距离(C语言)

Problem Description   世界上最遥远的距离   不是生与死   而是我就站在你面前   你却不知道我爱你   世界上最遥远的距离   不是我就站在你面前你却不知道我爱你   ...

世界上的程序语言那么丰富,还不够吗?

【IT168 评论】程序语言百百种,想要学 Coding 就必须先确定你的目的是什么,有的是拿来写App的,有的是专写操作系统,有的则是拿来写网页的 …… 各种不同的目的都有其最适合的语言。常见的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JavaScript:世界上误解最深的语言
举报原因:
原因补充:

(最多只允许输入30个字)