JavaScript:世界上最被误解的语言
JavaScript,或者叫 Mocha,或者叫 LiveScript,或者叫 JScript,又或者叫 ECMAScript,是世界上最流行的编程语言之一。事实上世界上的每一台个人电脑都安装并在频繁使用至少一个JavaScript解释器。JavaScript的流行完全是由于他在WWW脚本语言领域中的地位决定的。
尽管它很流行,但是很少有人知道JavaScript是一个非常棒的动态面向对象通用编程语言。这居然能成为一个秘密!这门语言为什么被误解如此之深?
名字
Java- 前缀很容易使人联想到Java,并认为它是Java的子集或简化版的Java。看起来最初给它选这个名字是别有用心的,是故意混淆概念、故意制造"误解"的。JavaScript不是解释执行的Java。Java是解释执行的Java。JavaScript是另外一种语言。
JavaScript的语法和Java有相似之处,这就像Java的语法和C很相像一样。但是它不是Java的子集,就像Java不是C的子集一样。它在Java(Oak)最初打算进军的领域中比Java更好。
JavaScript不是Sun Microsystems的产品,Sun是Java的家。JavaScript是在Netscape被开发出来的。它最初叫LiveScript,嗯……还是这个名字好。
-Script后缀让人认为他不是一门真正的编程语言,和一门"编程语言"还有相当的差距。但是这只是应用领域的问题。和C相比,JavaScript是牺牲了性能但换来了丰富的表现力和灵活的形态。
披着C皮的Lisp
JavaScript的类C语法,包括大括号和语句的形式,让它看起来像普通的面向过程编程语言。这是一种误解,因为JavaScript和函数式语言,比如 Lisp 或 Scheme,有更多的相似之处,而不是和C或Java。它使用数组而不是列表,使用对象而不是属性列表。函数是第一位的,它有闭包(closures 怎么翻译??),另外你还可以使用lambda表达式。
类型转换
JavaScript最初被设计成在Netscape Navigator中运行,它在Navigator中的成功引领它成为事实上所有web浏览器的标准装备。这就造就了"类型转换"。JavaScript是编程语言中的 George Reeves(超人),是大量非web程序的称职之选。
移动靶
JavaScript的最初几版非常弱,没有异常处理,没有内部函数和继承。现如今,它已经成为完全面向对象的编程语言。但是这门语言的许多思想是基于它不成熟的形式的。
ECMA委员会,这门语言的管家,正在对它进行扩展,也在蓄意恶化它最大的问题:有太多的版本。这是混乱的根源。
设计上的错误
没有什么编程语言是完美的。JavaScript也有它设计上的错误,比如重载的+号随着类型的不同既表示"相加"又表示"连接",和本该避免的有错误倾向的 with 语句。它的保留字策略过于严格。分号的插入是一个巨大的错误,比如作为字面正则表达式的符号时。这些失误已直接导致编程中的错误,也使这门语言的整体设计遭人质疑。还好,这些问题中有许多都可以在良好的 lint 程序中得以缓解。
这门语言的整体设计(上的问题)是相当明显的。奇怪的是ECMAScript委员会并没有对修正其中存在的问题表现出太大的兴趣,也许他们更热衷于制造新的问题。
糟糕的实现
JavaScript的一些早期实现有许多bug,这反过来对语言本身产生了很坏的影响。更糟糕的是这些满是bug的实现是嵌入在满是bug的web浏览器中的。
糟糕的书
几乎所有的JavaScript书都是相当可怕的。它们包含错误,包含不好的例子,并鼓励不好的做法。JavaScript语言的一些重要特性它们要么没有解释清楚,要么根本就没有提及。我看过很多JavaScript的书,但我只能推荐一本:David Flanagan著的 JavaScript: The Definitive Guide (4th Edition) (《JavaScript权威指南 第四版》)。(作者们请注意:如果你们写出了好书请发给我一份副本,我给你们校对。)
“准标准”的标准
ECMA公布的官方语言规范的质量极其的差。不仅难读而且极其难懂。它可为那些"糟糕的书"做出了不小的贡献,因为那些作者无法通过这个标准文档来更深地理解这门语言。ECMA和TC39应该为此感到非常尴尬。
业余者
使用JavaScript的人大多不是程序员,他们缺少写良好程序的培训和训练。JavaScript有非常强大的表现力,不管怎样他们也能使用它做有用的事情。这给了JavaScript一个”全然适合业余爱好者而不适合专业程序员“的名声。这很明显是一个错误。
面向对象
JavaScript是面向对象的吗?它有对象,它的对象可以包含数据以及对数据进行操作的方法,对象也可以包含其他的对象。它没有类,但是它有构造函数来做类的事情,包括声明类的变量和方法。它没有面向类的继承,但是他有面向原型的继承。
构建对象系统的两大主要方法是继承(is-a)和聚合(has-a)。这两者JavaScript都有,但是它的动态天性允许有比聚合更好的实现方式。
一些关于JavaScript不是真的面向对象的争论其理由是它没有提供信息隐藏。也就是说JavaScript的对象没有私有变量和私有方法:它的所有成员都是公开的。
但是事实是JavaScript 的对象可以有私有变量和私有方法(点击这里来看如何实现)。当然,之所以很少有人知道这个是因为JavaScript是世界上误解最深的语言嘛。
另一些关于JavaScript不是真的面向对象的争论其理由是它没有提供继承。但是事实是JavaScript不但支持经典的继承,而且支持其他一些代码重用的模式。
作者:道格拉斯·克罗克福德(Douglas Crockford)
作者简介:Douglas Crockford是Web开发领域最知名的技术权威之一,ECMA JavaScript2.0标准化委员会委员。被JavaScript之父Brendan Eich称为JavaScript的大宗师(Yoda)。曾任Yahoo!资深JavaScript架构师,现任PayPal高级JavaScript架构师。
JavaScript:世界上最被误解的语言相关推荐
- JavaScript: 世界上最被误解的语言|Douglas Crockford
这篇文章是javascript大牛Douglas Crockford 写的,实习的时候曾读过,现在再读,又有了不同的理解,特此转载. 原文地址:JavaScript: The Wrrrld's Mos ...
- javascript世界上最被误解的语言
http://www2.uuzone.com/blog/555080192/18957.htm
- javascript——从「最被误解的语言」到「最流行的语言」
JavaScript曾是"世界上最被误解的语言",因为它担负太多的特性,包括糟糕的交互和失败的设计,但随着Ajax的到来,JavaScript"从最受误解的编程语言演变为 ...
- 世界上最有能量的语言,一定要经常说!
1.能控制住对方发火的语言: 对不起! 2.筑起谦虚人格塔的语言: 谢谢你! 3.让对方耸起肩膀的语言:做得好! 4.能召唤和解和和平的语言:我错了! 5.能提高存在感的语言:你真棒! 6.把对方心情 ...
- JavaScript:从最受误解的编程语言演变为最流行的语言 The World's Most Misunderstood Programming Language Has Become the Wo
edit@2011-4-27 by frank: 1.加入了插图:2.修改了文章的字眼.语句:3.统一了CSS样式. 最新地址在 http://www.ajaxjs.com/popular.htm - ...
- 世界上最有效率的语言
https://www.sohu.com/a/120594953_418353 人类现存于世的语言有六七千种之多,哪一种是效率最高的语言呢?法国里昂大学的语言学家给出了一个衡量标准--信息率,即在相同 ...
- 有人说Java是世界上最好的语言,也有人说Java这几年就会没落,你怎么看呢
Java语言长期以来一直霸占多数热门编程语言榜单的榜首,可见这是一个备受程序员热捧的编程语言.但随着各种语言的兴起,出现了很多问题,Java真的要没落了吗?Java这个20多年的后端常青树难道真的要走 ...
- 世界上最著名的操作系统是用什么语言编写的?
Unix 与 C 语言的关系 在服务器领域,最著名的系统莫过于Unix了,即便Linux也是类Unix的操作系统.Unix 是用 C 语言编写的,而且是世界上第一个用 C 语言编写的操作系统.但是 U ...
- 在别人网页上运行js脚本_初始JavaScript,世界上最流行的语言之一
1.JavaScript 是什么? JavaScript 是世界上最流行的语言之一,是一种运行在客户端的脚本语言 (Script 是脚本的意思) 脚本语言:不需要编译,运行过程中由 js 解释器( j ...
最新文章
- CUDNN_STATUS_NOT_INITIALIZED解决汇总
- 解决Dependency ‘xxxx‘ not found
- 【OpenCV入门教程之五】 分离颜色通道多通道图像混合(转)
- 结对-人机对战象棋游戏-开发过程
- [jzoj 5775]【NOIP2008模拟】农夫约的假期 (前缀和+递推)
- 一颗接一颗的飞鸽传书
- android视频播放器sdk对比,Android项目之android SDK视频播放与vitamio视频播放
- VMware Workstation Player与VMware Workstation Pro的区别
- diskgenius扩容c盘重启电脑卡住_用diskgenius更改分区参数的终止柱面,扩大C盘空间后...
- PHP在线测算带支付运营版,【PHP】最新在线自动发卡平台源码,带多个支付接口及商户平台...
- codebook码本算法
- PhotoShop 2018 CC 破解 (Win10 附补丁)
- 1.CLUSTERDOWN Hash slot not served
- python中如何判断词性_python进行词性分析
- Three.js修改模型中心点
- java模拟简单的qq聊天_初学java之模拟QQ聊天软件(简单实现)
- 学习虚幻4(一)U3D与UE4的比较
- android studio lint,Android Studio Lint 工具
- JME 3 入门教程 3 - Hello Assets
- python归一化 增大差异_Python实现描述性统计