[译]JavaScript:被世人误解最深的编程语言

原文地址 http://www.crockford.com/javascript/javascript.html

JavaScript又叫做MochaLiveScriptJScriptECMAScript,是世界上最流行的编程语言之一。几乎世界上每台电脑都至少安装了一个JavaScript解释器并且在使用。JavaScript如此流行完全归因于它是万维网的脚本语言。

尽管它很流行,可是JavaScript是一门非常优秀的动态面向对象通用型的编程语言这一点却鲜为人知。这怎么可能是个秘密呢?为什么这门语言会被如此的误解?

名字
Java-单词作为前缀似乎在暗示着JavaScriptJava语言怎么着也该有点关系,言下之意,JavaScriptJava语言的一个子集或者功能稍弱的一个Java版本。仿佛这个名字自始之初就是为了给人制造困惑,最后让人产生误解。JavaScript不是JavaJava才是JavaJavaScript是一门不同的语言。

JavaScriptJava语法有很多的相似性,就像JavaC语言那样。但是JavaScript并不是Java的一个子集,就像Java不是C语言的子集一样。在起初打算使用Java的应用中,JavaScript表现比Java`更优秀。

JavaScript的诞生地是网景公司,而不是Java的老家Sun公司。刚开始它的名字叫做LiveScript,但是这个名字还不够让人迷惑。

以单词 -Script为后缀表明它不是一门真正的编程语言,通常意义上讲,脚本语言的功能要弱于编程语言。与C语言相比,JavaScript牺牲了性能换来了强大的表达能力以及动态特性。

披着C语言外衣的Lisp语言
JavaScript的类C文法,包括大括号和笨重的声明,使得他它看起像一门普通的过程式语言。这是个误导,因为JavaScriptLisp以及Scheme这类的函数式语言更像,和C语言以及Java倒不大像。它有数组而不是列表,它有对象而不是属性列表。函数是一阶公民。它有闭包,你可以使用lambda特性而不需要去考虑对齐所有的括号。

身份转换
JavaScript设计之初运行于网景浏览器中。其成功使得JavaScript成为几乎所有web浏览器的标配。这导致身份转换。JavaScript是一门程序设计语言。JavaScript同样适合于许多非web类的应用场景

“日新月异”
JavaScript的初期版本功能有限,缺乏异常处理机制,内置函数以及继承。而如今的JavaScript俨然已是一门完整的面向对象的编程语言。但是现在的很多语言特性都是基于早期的不成熟形式。管理这门语言的ECMA委员会正在不断扩展这门语言,尽管是好心,但是却带来了非常大的问题。这门语言已经有太多的版本了,太混乱了。

设计错误
没有堪称完美的编程语言。JavaScript同样有设计错误,比如对+的重载,既表示加法又表示强制类型转换进行拼接,还有易于出错的with语句应该被避免掉。将单词policies作为保留字显得太过严苛。分号插入是个严重的错误,就像正则表达式里分号的记号那样。这些过失已经导致了程序设计错误,并且使得整个语言的设计成为问题。幸运的是,许多这类问题可以通过一个好的lint程序来规避。

总体来说,语言的整体设计是非常出色的。令人吃惊的是,ECMAScript委员会似乎志不在修复这些问题。也许他们意在制造更多的麻烦。

糟糕的实现
早期JavaScript的某些实现版本实在是不敢恭维。语言显得很糟糕。祸不单行,那些(糟糕的)实现版本被嵌入到更糟糕的浏览器中。

垃圾书籍
几乎所有关于JavaScript的书籍写的都很烂. 书中包含了错误、糟糕的代码示例,并且提倡一些不好的实践方式。语言中的一些重要的特性经常被解释的很糟糕或者根本不被提及。 我审阅了许多JavaScript的书籍, 并且** 我只推荐一本**: JavaScript: 权威指南 (第五版) 作者 David Flanagan. (注意了作者们: 如果你写了一本, 请寄给我我一本审校版.)

不合格的标准
JavaScript语言官方文档ECMA发布。文档质量令人堪忧:难于阅读并且难以理解。这似乎是哪些垃圾书籍的始作俑者,因为作者们很难通过标准文档来提高他们对该们语言的理解水平。ECMA组织以及TC39委员会应该深感自责。

业余的开发者
绝大多数JavaScript开发人员都是非科班程序员。他们没有受过正规训练以及缺乏写优秀代码的自律精神。JavaScript语言表达能力如此之强可用用来干很多事。如此一来这使得JavaScript赢得了一个业务爱好者们的语言的美誉,换言之JavaScript不适合专业的编程开发。事实并非如此。

面向对象
JavaScript是面向对象的吗?它有对象,这些对象包含了数据和操纵数据的方法。对象可以包含其它对象。它没有类,但是它有构造函数其作用和类的作用一样,作为类变量以及方法的容器.JavaScript不是基于类的继承,它是基于原型的继承。

构建对象系统的两种主要方式是继承(is-a)和聚合(has-a)。JavaScript两者都支持,但它的动态特性使得它在聚合方面表现的更好。

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

但事实证明,JavaScript对象可以有私有变量和私有方法。 (点击这里了解更多)当然,很少有人理解这一点,因为JavaScript是世界上最被误解的编程语言。

有人认为JavaScript不是真正的面向对象,因为它不提供继承。 但事实证明,JavaScript不仅支持经典的继承方式,还支持其他代码重用模式。

Copyright 2001 Douglas Crockford. All Rights Reserved Wrrrldwide.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,914评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,935评论 2 383
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,531评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,309评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,381评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,730评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,882评论 3 404
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,643评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,095评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,448评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,566评论 1 339
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,253评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,829评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,715评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,945评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,248评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,440评论 2 348

推荐阅读更多精彩内容

  • TITLE: 编程语言乱炖 码农最大的烦恼——编程语言太多。不是我不学习,这世界变化快! 有时候还是蛮怀念十几、二...
    码园老农阅读 5,300评论 2 35
  • JavaScript语言的历史 来自《JavaScript 标准参考教程(alpha)》,by 阮一峰 目录 Ja...
    Seachal阅读 999评论 2 5
  • 顽石溪流 经历岁月的手 天睹苍颜 美丽已流走 妩媚娇艳的你 心中开满爱情豆 诱人的芬芳 馥郁了本已被人们 打入冷宫...
    美丽天空一阅读 506评论 32 69
  • 五一回家,以为可以在家多呆几天,无奈有事,只能提前返程。母上问我什么时候回工作地的时候,我说明天就走,虽然她只回答...
    喵柒阅读 307评论 0 1