热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

JavaScript,也叫Mocha,LiveScript,JScript,ECMAScript,是世界上最受欢迎的编程语言之一。事实上,世界上每个人的个人电脑上至少安装了一种JavaScript的解释器,并且被广泛地使用着。

Javascript,也叫Mocha,LiveScript,JScript,ECMAScript,是世界上最受欢迎的编程语言之一。事实上,世界上每个人的个人电脑上至少安装了一种Javascript的解释器,并且被广泛地使用着。Javascript如此受欢迎的原因在于它在万维网中所扮演的脚本语言的角色。

名字

Java这个前缀的暗示使得人们总会把Javascript和Java联系起来,认为Javascript是Java的一个子集或者是一个功能差于Java的一个版本。似乎Javascript这个名字就是有意造成一种混淆,而这种混淆带来了后来的误解。Javascript不被解释成Java,Java就是Java。而Javascript则是另一种不同的编程语言。

Javascript的语法和Java相类似,这就像Java和C类似一样。但是,Javascript并不是Java的一个子集就像Java不是C的子集。Javascript在应用程序方面比Java(Oak)当初所打算的表现地更好。

Javascript并不是在Java的诞生地——Sun Microsystems公司,被开发出来的,而是在Netscape(网景)被开发出来的。它最初被叫做LiveScript,而这个名字并没有让人们很迷惑。

Script这个后缀的暗示,说明Javascript不是一种真正的“编程语言”,作为一门脚本语言和编程语言相比,还是有差距的。但是,这的确是一个专业化的问题。和C语言相比,Javascript通过牺牲性能而换取更加丰富的表达能力和动态性。

披着 C 外衣的 Lisp

Javascript的类 C 语法,包括花括号和笨重的for语句,使得它看起来更像是一种普通的过程式的语言。这是一种误导,因为和C 或 Java相比,Javascript 和 函数式语言——比如 Lisp 和 Scheme,有着更多的相似之处。它用数组代替列表,用对象代替属性列表。函数是第一类型,函数可以有闭包。你不需要去平衡所有的这些圆括号,就可以使用匿名函数。

语言类型定型

Javascript最初的设计是运行在Netscape Navigator上的。它的成功使它事实上成为了所有网页浏览器的标准配置。这就造成了语言类型的定型。可以说,Javascript就是编程语言中的 George Reeves(注:美国演员,因扮演“超人”出名,导致被定型,而无法接演其他角色)。Javascript也适用于很多和网页无关的应用程序。

变动的(语言设计)目标

Javascript的第一个版本相当的弱。它缺少异常处理、内部函数、继承。就它现在的形式而言,它已经是一门完整的面向对象的编程语言了。但是,针对这门语言的很多观点都是基于它不成熟的形式而引发的。
负责管理这门语言的ECMA委员会正在开发扩展,这本是出于好意,但是这也加剧了一个更大的问题:版本变得越来越多。而这造成了更多的困扰。

设计错误

没有任何编程语言是完美的。Javascript也有它本身设计错误,比如重载表示相加和附带类型转换的串连接两个含义,易错的with语句也应该避免使用。保留字策略过于严格。分号的嵌入也是一个巨大的错误,正则表达式的符号也是一样。这些错误会导致编程错误,同时将语言的设计作为一个整体质疑。幸运地是,这些问题中的很多问题可以用一个非常不错的 Lint 程序来缓和。

这个语言的设计整体上是相当健全的。令人惊讶地是,ECMAScript委员会似乎对于纠正这些错误并不感兴趣。也许,他们对创造一个新的语言更感兴趣吧。(注:这里应该是作者的调侃语)。

糟糕的实现

Javascript早期的一些实现可谓是错误百出。这一点反映在语言上。更糟糕地是,这些实现被嵌入到了更加错误百出的web浏览器之中。

糟糕的参考书籍

几乎所有关于Javascript的书籍都相当地糟糕。它们充满了错误,不恰当的例子,和没什么帮助的练习。这门语言中的重要特性被糟糕地解释,或者被完全忽略。我修订过很多关于Javascript的书籍,但是我只推荐一本:《Javascript权威指南(第五版)》——作者:David Flanagan。(作者语:如果你写了一本很好的书,请给我邮递一本赠阅本。)

不合格的标准

Javascript的官方规范是由ECMA出版的。这个官方规范的质量相当的低。而且难以阅读和理解。这是一个造成拙劣书籍问题的一个原因,因为作者们无法使用标准文档来提升他们对语言的理解。ECMA和TC39委员会应该为此感到深深地窘迫和不安。

业余爱好者

很多使用Javascript的人并不是程序员。他们缺乏专业素质和编写优秀程序的训练。无论如何,Javascript拥有如此强大的表现力,以致于他们通过使用Javascript可以做很多有意义的事情。这就让Javascript背上了一个名声,就是说,Javascript完全是给业余人员设计的语言,它不适合用于专业编程。其实,事实并非如此。

面向对象

Javascript是面向对象的吗?它拥有对象,它的对象可以包含数据和处理数据的方法。对象中可以包含其他的对象。它没有类,但是它有构造函数,通过构造函数可以做类似于类的操作,包括充当类变量和方法的容器。它没有面向类的继承,但是它有面向原型的继承。

创建对象体系的两个主要方式分别是通过继承和通过聚合。Javascript两个方法都有,但是它的动态性使得它可以在聚合的基础上变得更加优秀。

一些争论认为Javascript不是一门真正的面向对象,因为它不支持(提供)信息的隐藏。也就是说,对象不能拥有私有变量和私有方法:所有的成员都是公共的。

但是又有证明显示,Javascript中的对象可以有私有变量和私有方法。(注:原文中,作者这里是一个链接,介绍关于对象私有变量和私有方法的文档)当然,很少有人理解这一点,因为Javascript是世界上最被误解的编程语言。(注:作者这里使用了一种轻松的调侃方式)。

一些争论认为Javascript不是一门真正的面向对象,因为它不支持继承。但是这又被证明Javascript不仅能支持传统的继承还能应用其它的代码复用模式。(注:原文这里仍然是一个链接)

版权2001年道格拉斯Crockford。版权所有Wrrrldwide。

【推荐课程:Javascript视频教程】

以上就是Javascript:世界上最被误解的语言的详细内容,更多请关注 第一PHP社区 其它相关文章!


推荐阅读
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 处理docker容器时间和宿主机时间不一致问题的方法
    本文介绍了处理docker容器时间和宿主机时间不一致问题的方法,包括复制主机的localtime到容器、处理报错情况以及重启容器的步骤。通过这些方法,可以解决docker容器时间和宿主机时间不一致的问题。 ... [详细]
  • 本文介绍了Java的集合及其实现类,包括数据结构、抽象类和具体实现类的关系,详细介绍了List接口及其实现类ArrayList的基本操作和特点。文章通过提供相关参考文档和链接,帮助读者更好地理解和使用Java的集合类。 ... [详细]
  • 本文介绍了在Docker容器技术中限制容器对CPU的使用的方法,包括使用-c参数设置容器的内存限额,以及通过设置工作线程数量来充分利用CPU资源。同时,还介绍了容器权重分配的情况,以及如何通过top命令查看容器在CPU资源紧张情况下的使用情况。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文介绍了使用Python解析C语言结构体的方法,包括定义基本类型和结构体类型的字典,并提供了一个示例代码,展示了如何解析C语言结构体。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 本文介绍了一种图片处理应用,通过固定容器来实现缩略图的功能。该方法可以实现等比例缩略、扩容填充和裁剪等操作。详细的实现步骤和代码示例在正文中给出。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
author-avatar
两人浪漫_607
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有