搜索
首页web前端js教程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中文网其他相关文章!

声明
本文转载于:CSDN。如有侵权,请联系admin@php.cn删除
es6数组怎么去掉重复并且重新排序es6数组怎么去掉重复并且重新排序May 05, 2022 pm 07:08 PM

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

JavaScript的Symbol类型、隐藏属性及全局注册表详解JavaScript的Symbol类型、隐藏属性及全局注册表详解Jun 02, 2022 am 11:50 AM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

原来利用纯CSS也能实现文字轮播与图片轮播!原来利用纯CSS也能实现文字轮播与图片轮播!Jun 10, 2022 pm 01:00 PM

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

JavaScript对象的构造函数和new操作符(实例详解)JavaScript对象的构造函数和new操作符(实例详解)May 10, 2022 pm 06:16 PM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

javascript怎么移除元素点击事件javascript怎么移除元素点击事件Apr 11, 2022 pm 04:51 PM

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

JavaScript面向对象详细解析之属性描述符JavaScript面向对象详细解析之属性描述符May 27, 2022 pm 05:29 PM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

foreach是es6里的吗foreach是es6里的吗May 05, 2022 pm 05:59 PM

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。

整理总结JavaScript常见的BOM操作整理总结JavaScript常见的BOM操作Jun 01, 2022 am 11:43 AM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具