首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

史上被骂至多的编程语言——JavaScript

2013-09-06 
史上被骂最多的编程语言——JavaScript学海泛舟系列之二史上被骂最多的编程语言——JavaScript金旭亮注:这是一

史上被骂最多的编程语言——JavaScript

学海泛舟系列之二

史上被骂最多的编程语言——JavaScript

金旭亮

注:

这是一个系列文章,访问以下链接查看全部文章

 

《学海泛舟系列文章开篇语》(http://blog.csdn.net/bitfan/article/details/10049513)

 

 ==============================================================================

一、世无英雄,遂使竖子成名


1 Web客户端编程语言事实上的王者


(1)JavaScript为何成功?

几乎所有的JavaScript书都会先介绍一番JavaScript的历史,比较有趣的是我在资料中看到这样一句话:

JavaScript的设计者Brendan Eich曾在一次采访中说,JavaScript“几天就设计出来了”。

Ruby的设计者——松本行弘为此感叹:

“这样的出身,得到这样的成功,还真让人出乎意料,……”,

“但由于开发周期短,确实也存在着不足……”。

确实,作为一种编程语言,JavaScript并不完美,在实际开发中,JavaScript同样也存在着严重的问题,其中最突出的就是早期没有完整的规范,导致浏览器厂商各行其是所带来的兼容性问题。

但奇怪的是,就是这样一个并不完美的东西,最终却成为了Web客户端编程语言事实上的王者,而它的种种缺陷,却给我们带来了丰富多彩的各种JavaScript库及框架,整个JavaScript社区则生机勃勃,活力四射,这真是一件很有趣的事。

在我看来,JavaScript的成功在于它“生逢其时”,赶上了互联网大发展的时代契机。而当时“时无英雄,使竖子成名”。

读者可能不服气,那建议你看看那本著名的、指出过“10000小时专业训练是成为天才的必要条件”的《异类》,在此书中,作者Malcolm Gladwell列举了诸多二十世纪在IT业呼风唤雨的大人物:微软比尔盖茨、保罗艾伦和史蒂夫鲍尔默,苹果的乔布斯,Google的埃里克施密特,Sun的比尔乔伊……,他们全部出生在1953~1956之间;

再看看当前中国IT大佬们——李彦宏(1968.11)、张朝阳(1964)、马化腾(1971)、丁磊(1971),马云(1964),刘强东(1974)……,他们的出生日期都集中在上世纪60与70年代交替的时期,……

为什么会这样呢?请结合他们创业的时代大背景看看就明白了。

时势造英雄。JavaScript就是这样的幸运儿。生逢其时,伴随着互联网的发展,有不计其数的Web应用是使用它编写的,JavaScript应用得越广,其社区就越活跃,优秀的程序员不断为JavaScript贡献大量的框架和库,还有Google和微软这样的大公司不断地想办法弥补或改进JavaScript的现有缺陷,推出新的脚本语言和优化其引擎……

一切都构成了一个完整的生态圈。以后的脚本语言,哪怕比JavaScript要好很多,也难以重现JavaScript的辉煌了,JavaScript己经成为Web客户端事实上的王者。

(2)为什么JavaScript招人骂?

有趣的是,尽管JavaScript用得如此广泛,但仍然承担了很多开发者的抱怨,我估计JavaScript可能是“到目前为止,计算机软件史上被人骂得最多的编程语言”。

为什么会这样呢?

我看原因有三。

首先是至今犹存的浏览器兼容性问题,请看以下代码:

 

var myRequest;//1:依据浏览器的类别创建相应的对象if (window.XMLHttpRequest) {    //非IE浏览器    myRequest = new  XMLHttpRequest();} else if (window.ActiveXObject) {     //IE浏览器    myRequest = new  ActiveXObject("Microsoft.XMLHTTP");}// 2: 响应XMLHttpRequest对象的readystatechange事件,为其定义回调代码:myRequest.onreadystatechange = function(){    if (myRequest.readyState=== 4) {       //收到的数据放在myRequest.responseText中,接着可使用DOM来更新页面        ……    }};// 发送请求myRequest.open('GET', 'simple.json', true);myRequest.send(null);


 

可以看到,数据取回以后,通常使用DOM来更新页面。

服务端返回什么样格式的数据完全可以由开发者自行决定,现在比较流行的是直接返回JSON格式的数据,一是方便,JavaScript能直接解析它;二是数据紧凑,JSON比XML数据量要小得多,三是跨平台性好,目前许多手机应用都采用JSON来从服务器上提取数据。

 

(4)各种JavaScript框架

当前在互联网上可以找到N种JavaScript框架或库,各有各的用途,各有各的应用场景。有大量的书籍和资料介绍这些框架,在此就不废话了。如果你时间有限,并且是初学者,那我建议你只要好好学习jQuery就够了,这是一个当前应用极为广泛的成熟的框架,设计得非常出色,你可以举一反三,再学习其他框架也并不困难。

(5)服务端的JavaScript——Node.js

JavaScript最初是一种运行在浏览器环境中的脚本语言,但Google推出的了一个名为Node.js的JavaScript运行环境,使用其研发的JavaScript V8引擎,使得JavaScript代码可以运行在服务端。

Node.js采用事件驱动和异步I/O,高度模块化,性能表现相当优异,属于近几年的技术热点,有机会时我针对它另写篇文章向大家介绍。

(5)开发Win8与智能手机应用

当前主流的智能手机操作系统——iOS和Android,其浏览器都配备了JavaScript脚本引擎,并且对HTML5特性的支持比较好。因此,现在有许多使用JavaScript开发的移动Web应用,开拓了JavaScript应用的新天地。

顺便说一下,使用JavaScript也能在微软的Windows 8中开发新的Windows 8类型的应用并放到Windows商店上去卖,但目前其前景并不算明朗,感兴趣的朋友可以自行钻研一下。

         有关移动Web开发技术,计划放在另外的文章中介绍。

三、我的JavaScript学习建议

不管你对JavaScript感觉如何,只要你从事互联网应用开发,JavaScript就是你绕不过去的。因此,本小节就针对初学者谈谈JavaScript的学习建议。

我总结了一下,JavaScript大致可以分为以下几个学习阶段:

(1)开始起步:这一阶段主要是学习与掌握基本语法

比如了解JavaScript有哪些关键字,有哪些数据类型,变量作用域是如何定义的,分支与循环语句如何编写等等,这没什么好说的,几乎是学习所有编程语言都要完成的工作。

只要你学过C/Java/C#/C++,掌握JavaScript基本语法用不了两小时。

(2)深入探索:这一阶段主要是把握JavaScript特性,学习典型编程技巧,理解相应内部机理

通常这一阶段需要阅读大量的JavaScript技术书籍,并花费相当的时间编写各种小的Demo,才能真正掌握好JavaScript编程语言,为下一阶段打下基础。需要重点把握的内容在前文己有介绍。

(3)学以致用:基于各种JavaScript库(或直接使用JavaScript)编写实际应用,并进一步地学习JavaScript相关的技术,比如Node.js或进一步学习开发智能手机Web应用等技术。

这就没什么好说的啦,依据你的工作与学习需求,选择相应的内容来学习。不打算成为JavaScript专家的话,大多数人应该都会长期停留在这一阶段。

(4)游刃有余:处于这一阶段的人,己经具备编写浏览器兼容性和可重用可扩展的库或框架的能力

这部分人精通JavaScript同时又有自己的想法,往往会致力于开发新JavaScript库及框架,或者是进一步扩充JavaScript的具体应用领域。

(5)开彊拓土:设计全新的脚本编程语言和运行平台

这活个人英雄主义可能就行不通了,现在通常是由大公司或“大牛人”来做,比如Google推出了V8引擎,还设计了一种JavaScript的替代语言——Dart(https://www.dartlang.org/),意图弥补JavaScript的缺陷。

而C#的设计者——AndersHejlsberg,就参与了微软推出的TypeScript(http://www.typescriptlang.org/)脚本编程语言的设计与研发工作。与TypeScript类似的另一种知名的脚本编程语言是CoffeeScript(http://coffeescript.org/),它们都构建了一套“自认为”更合理的语法体系,但并不实现自己的脚本运行引擎,而是把程序代码“编译(Complile)”成标准的JavaScript代码,在现有的JavaScript引擎上运行。

小结:

JavaScript虽是一种有着近20年历史的编程语言,但其生命力却日见旺盛,伴随着互联网的发展,它己经成为21世纪最重要的编程语言之一。

JavaScript技术领域包容相当多的内容,并且还在扩展当中。这篇小文从诸多JavaScript技术书籍和教学资源中选出了一些我觉得比较重要的内容整理并介绍给大家,挂一漏万,且可能存在着错误,只希望能给初学者以一点引导与帮助,吾愿足矣!

===========================

预告:

本系列的下一篇文章将介绍HTML 5技术领域。

 

18楼shurulo20小时前
不错 感谢您的分享 学习中
17楼wanglei19830426前天 09:30
对于javascript的缺陷,还是认为没有类实属javascript的一大败笔,其他诸如名字或者浏览器兼容,这个实际来说并不是javascript的缺陷,浏览器兼容依然是人类计算机技术历史上需要经历的一个漫长过程。n对于代码效率则研究的不多,变量与类的特性相似是否增加运算时的内存开销也不得而知,总之6年接触下来,还是非常喜欢这个语言。
16楼komway3天前 00:28
浏览器的兼容性不是javascript的错,DOM本来就不是Javascript的一部分。
15楼u0109984083天前 23:22
您的文章已被推荐到CSDN首页,感谢您的分享。
14楼maojunhua4天前 20:41
谢谢分享,写得非常好,条理清晰,详略得当,重点突出。
13楼junhm4天前 17:36
写的很好,赞一个!
12楼Anewczs4天前 15:01
Good~
11楼u0116503264天前 13:46
很好,学习了
10楼danninie4天前 13:02
非常不错!
9楼u0117453524天前 12:16
挺好,学习力
8楼u0118244624天前 11:37
介绍的比较好
7楼linustd4天前 09:51
金老师的最大败笔就是,从DOS时代过来的人,除了微软就没见过天,导致被微软绑架了。
6楼wangxinghe5天前 19:54
没想到我竟然认认真真地从头看到了尾,虽然我很讨厌JavaScript,明明就是个四不像,非要沾点Java的光辉。一开始就叫JScript或者WebScript(WScript)不更好?弄得我现在看到JavaScript就读JScript,本来就跟Java没啥关系。
5楼yyj04035天前 18:41
window.color = "red"; n nvar o = { color: "blue" }; n nfunction sayColor(){ n n alert(this.color); n n} n nsayColor(); //red n nsayColor.call(this); //red n nsayColor.call(window); //red n nsayColor.call(o); //blue nnn在严格模式下, 前三次 调用 是不是不行?
4楼suannai03145天前 16:38
您的文章已被推荐到CSDN首页,感谢您的分享。
3楼li_star5天前 16:23
非常详细
2楼cownew5天前 10:33
“浏览器兼容性问题是硬伤”,浏览器兼容性问题和JavaScript没有关系,JavaScript只是语言而已,而“浏览器兼容性问题”是DHTML问题,而DHTML是浏览器提供的。用C#、Java、Python……任何一门语言代替JavaScript照样会有浏览器兼容性问题。
Re: linustd5天前 13:27
回复cownewn这不是扯鸡巴蛋么
1楼newton5205天前 23:56
[quote=linustd]金老师的最大败笔就是,从DOS时代过来的人,除了微软就没见过天,导致被微软绑架了。[/quote]n你见过世面?

热点排行