1、如何学好 javascript 今天逛论坛时看到有朋友问,是否有专门教 Javascript 的学校,这里想想把自 己的一点建议和自己 3 年来的前端 Javascript 开发的经验跟大家分享下,也给 出几本个人认为不错的书来做为大家学习的参考资料。当然只是个人的经验, 有什么不对的也请高手见谅和指正。 关于到培训学校学习的忠告:别说现在没有这样的学校,就是有专门的学校也 不要去,因为不会有好的老师的。不要浪费你自己(很可能是你父母)的钱和 时间。趁早死了这个念头。 关于培训学校的这个我想我要比一般的朋友更有发言权,因为我本人干英语培 训将近 2 年,我很清楚培训市场的情况,你很难碰到一个好
2、的老师。英语可能 还好些, 毕竟英语说得好的老师还比较多,长期跟老外泡在一起,确实对口语 能力的提高很显著,但是代价是很昂贵的。而你现在要学的是 Javascript,呵 呵,好 的前端工程师可不多! 我的个人观点,有资格和有能力的教好 Javascript 的老师,一定要是个好的有 着丰富的前端开发经验的前端工程师。大学的老师,教授可能他们中很少有 人 符合这个要求,而好的前端工程师,都忙着自己的工作去了。剩下的有时间去 教 Javascript 的人,呵呵,就不多说了。 这里也发点牢骚,我们在大学校园里学习的东西,你学的时候根本不知道这个 东西有什么意义,你自己不去钻研,老师他是不会告诉你
3、的。在培训学校,呵 呵,也差不多。 如果不是一个好的前端工程师,他很难告诉你为什么我们现在提倡使用闭包把 以前的全局变量放到闭包中作为闭包函数的局部变量?他也很难对 Javascript 变量作用域的相关知识跟你讲透彻。在 Javascript 里能够形成 scope(作用域) 的东西有哪些?为什么说全局变量是魔鬼?闭 包又是怎么产生的作用域?等等 这样很基础,但很重要的知识的意义,他不清楚,将给你听,让你明白这些知 识和他们的意义就更困难。 呵呵,所以我的建议,想学 Javascript,还是多跟你的身边认识的朋友,特别 是那些从事前端开发的工程师多交流和学习。自己要多钻研。呵呵,不认识 前
4、 端工程师,就到酷站资源 2010 来多看看( ,记住!这可不是广 告哦!),把你不清楚的问题提出来,但是我这里要说一个好的学 习习惯。什 么时候提问? 什么时候提问?这个也是问题吗?对的,很多人,也是很多在校学生的一个不 好的学习习惯,一有问题就问别人请求帮助。我个人这个是个坏习惯。难道问 问题也是 个坏习惯?对的,我个人觉得,你问问题寻求别人的帮助,应该是在 你自己已经动脑经思考,通过各种途径查阅相关资料都无法获取问题的最终解 决办法的情况下再 来提问?这样你已经对你要解决的问题做过研究,有一定了 解,你可以更详细的告诉别人你想要的答案大概是什么样的,或者说你可以把 你想描述的问题讲的更清
5、 楚。这样别人来解决你的问题的时候,也可以更快速 的作出解答。我想你学起来,对这个问题的理解也会更深刻些。 好了,好像扯得有些远了。来谈谈怎么学习 Javascript 吧!先给大家泼点冷水, 我想告诉你的是:Javascript 要比其他的开发语言都难学好! 为什么?因为就目前来说,大家(国内甚至是国外的程序员)普遍对 Javascript 这门编程语言(请允许我这么说)了解和研究得不够深,至少不像 大家对 JAVA,C#等这样的语言了解的和研究得那么透。所以这个就引起了另一 个问题,现在市面上 Javascript 的书籍对 Javascript 这门语言的 讲解都不够 深入和全面。当然是
6、相对 JAVA,C#这样的语言来说。所以这就导致了,学 Javascript 很困难。当然学任何一门编程语言,特别是学好, 学精都不容易。 不过也有好的消息,就是现在大家对 Javascript 的重视和更深入的研究,现在 Javascript 书籍里讲解的内容也要比 4 年前质量高出太多了,可 以这么说, 你现在开始 Javascript 正是时候哦!呵呵!所以这里也给大家一个经验,买 Javascript 的书,最好不要买 4 年前,也就是 2005 年前出版的。最好买近两 年出版的书。 说到这里,我想说说一个现象,随这大家近几年对 Javascript 的重视和研究, 主要是很多传统的程
7、序员开始学习和研究 Javascript,他们把面 向对象编程 的思想带入到 Javascript 的前端开发,极大的促进了 Javascript 的推广和发 展。这点要十分感谢他们。也许是处于这些程序员的传 统的开发的思想的影响, 现在我们的 Javascript 库如雨后春笋般的出现。 呵呵!JAVA 有 JAVA 的库和各种各样的框架,C#也是模仿 JAVA,也是有着丰富 的开发库。这些库为我们的开发带来了极大的方便,这是个很不错的事 情。所 以这些传统的程序员在从事前端的开发的时候,也为自己编写了库。我们很熟 悉的就有 prototype,jQuery,YUI,Ext 等等,我就不一
8、一列举了。当然这些库 的出现也为我们的前端开发带来了极大的方便,但是事情都有两面性的,在这 些库的出现后,在给我们的开发带来便利的同时,也让我们的很 多朋友产生对 库的依赖,可能严重点的,没有库了,给他个记事本(我们姑且不提开发效率) 可能就不知道如何下手了。 如果仔细想想,这个也是很可怕的事情。为什么?因为大家都不再去花心思去 研究 Javascript 底层的知识,只是一味的在这些库的帮助下,构建那些炫目 的特效(还好,这些库都是免费的)。或者干脆直接用别人写好的插件。都不 知道万一这些库要是开始收费(只是瞎想想),怎么办?还有就是这些库比如 有别有用 心的人,在中加点什么恶意的东西,我想
9、很难有人会从头到位把一个 库研究个透。你怎么办?最严重的就是编程能力的下降,但给人的感觉是入门 的门槛更底了。不 要被“The Write Less, Do More”这样的广告迷惑了,因 为在你加载这个库的同时,别忘了“Size of your web page is much bigger, or say the size is HUGE“. 所以当大家使用这些库的时候,我希望大家不仅仅是使用者,也要用心去阅读 这些库的代码,从中学习。收获会很大的,而且说不定,你会发现可个改善地 方,甚至 是有错误的地方。这个是很有可能的。还有就是我刚才提到的,这些 库的开发者很多都是从传统的程序员转型过
10、来,或者说是因为开发需要而开始 学习 Javascript,很可能会有错误。或者说受以前学习语言的影响,写的程序 更像是在写其他的语言,而不是写 Javascript,执行效率并不高。所 以不要 迷信库。 问几个问题,你清楚 jQuery 是怎么实现 CSS(3)和 XML 的 XPath 选择器的吗? jQuery 又是怎么实现 eventHandle 的?怎么处理其中的浏览器兼容性问题的? 如果你还不明白我提的问题,那么请仔细看看 jQuery 是怎么实现的吧!如果你 还读不懂它,还是多看看我要给你介绍的 Javascript 的书吧,了解 Javascript 的底层和基础的知识。让自己
11、能读懂 jQuery,让自己不要 jQuery 也能实现 Dom 的拖动,让自己也能写出自己的库。当然这话我 说得太大了。不 过只要你是真正研究 Javascript 和相关的知识,你也可以做到的。 绕了这么大一圈,现在让我们正式开始吧,来介绍几本学习 Javascript 的书吧。 (以下介绍的书都是本人自己购买阅读过的,对了我不崇洋媚外,一条真理: 不要买中国人写的 Javascript 书) 入门的书: Javascript 高级编程技术:不要被“高级”这两个字吓到,这个书其实是 本很不错的入门的书,因为这本书也很详细的介绍了 javascript 的全部内置 对象和语法,并且介绍了面向
12、对象的思想,DOM、BOM 的知识,正则表达式,高 级的 DOM 处理。Ajax 的知识,还是很全面的。而且个人认为这 本书对基础知 识的介绍并不比其他的同类书逊色。比起Javascript 权威指南(我当时买 点的是第 4 版),我觉得更详细些和更清楚些。在指南的 第 4 版中,我觉 得那本书中讲的东西有点混乱。感觉一个知识点还没有讲清楚,就给你一个什 么类,看得不明不白的。因为没有看指南的第五版,所以这里不推 荐给大 家。而且高级编程这本书要比指南便宜不少。高级编程中也提出 了采用功能(future)探测来取代浏览器版本探测来处理脚本兼容性的处 理。个 人觉得指南有的,这本书也都说了。还有
13、我前面提到的,这本书的作者是 YAHOO 的资深的前端工程师,你可以在他的网站下载到相关的代码。 Javascript DOM 编程艺术:我个人的感觉是学习 DOM 编程的经典入门书籍, 作者是 webstandards.org 的创始人之一,书中以浅显易懂的语言,教你一步一 步的 来讲解 DOM 编程,一点点地提升网站的用户体验。书中一直强调不唐突的 脚本开发,网站要向后兼容,强调网站的可访问性。这个也是大家在做前端开 发时应当努 力追求的,也是必须要有的开发指导思想。可惜很多的后台开发的 程序员,根本没有这个概念,所以你在开发的时候,一定要给你的程序员多洗 脑。呵呵! CSS 权威指南第三
14、版:做前端开发,你必须要了解 CSS,书中对 CSS2 的介 绍很详细了。仔细的看吧,我每次看的时候,有会有新的收获。 网站重构、CSS 网站布局实录(唯一一本推荐的国人写的书):看完 了,你会知道为什么学 WEB 标准?你会知道前端工程师的工作很重要。 提高阶段: Javascript DOM 高级编程:这本书里不光详细的介绍的 DOM 编程的技巧, 也讲了使用面向对象编程的方法,使用命名空间来管理书中所写的开发库,在 不断的学习中,你的个人 DOM Javascript 库也不断的充实。呵呵,就像我前 面说的,你可以写出自己的库了。当然书中的代码比较松散,还不能运用到实 际的企业级的开发中
15、。但是书 中对闭包的介绍和面向对象的开发思想,会使你 对 JS 的认识又提高了一个层次,虽然对面向对象开发的讲解还不够深。 XML 开发指南:我们知道 ajax,其中 X 就是指的 XML,所以要了解 XML 的相 关知识,你这本书,是一定要看的。看了之后你会发现 XML 要了解的东 西实在 太多了,可能跟你了解的东西相比,你才知道点皮毛。对了,这里说下,我并 不推荐你使用 XML 来作为你的 Ajax 的程序的数据的载体。为什么?因为很 不 经济。你先把数据转换成 XML 文档,然后再通过 Javascript 把 XML 文档中的数 据提出来,把文档转成数据。而浏览器对 XPath 处理的
16、兼容性的 处理,你会很 发狂的。现在我们有一个代替他的东西 JSON。但是由于 XML 已经是很多标准的 默认数据通讯载体,比如 RSS 等,所以你还是得掌握。 个人觉得学 Javascript 看这些书基本差不多了。因给在我买过其他的书( 精通 Javascript:名字起的太玄了,书不怎么样,什么都讲了点,就是不 讲他怎么用 jQuery 来实现那些高级功能的,不要买。 PPK 谈 Javascript感觉跟精通差不多,什么都讲点,不过多点。还有 起码不像精通起那么臭屁的名字,作者的网站确实很推荐大家去看看, http:/www.quirksmode.org/。 CSS 高级技巧介绍了很多
17、 HACK 技巧,也很有用,是本好书,就是翻译得比 较烂。 Ajax in Action、Ajax 高级编程介绍 AJAX 的内容,主要看看 XMLHTTPRequest 的介绍把,里面的例子,很多在高级编程中都看过了。 JavaScript 王者归来我上当了,自己也 SB 了一回。 JavaScript:The Good Parts(影印版)好书,你会知道 JAVASCIRPT 这闷语 言什么东西是好的,什么东西不好? )中,讲的内容都是大同小异。看完这些书,你了解了 Javascript 的相关知识, 了解了 CSS(你会知道 CSS 都有哪些选择器),你了解了 XML 的知 识。呵呵,
18、基础的开发你应该都可以自己解决了。而且你对 Javascript 的面向对象的开发 也有了了解,有着向后兼容的开发思想。显然你看完这些书,你 对 WEB 标准也 会有一个更深层次的理解。 当然,想成为一个优秀的前端工程师,你要学习的知识并不只有这些,你也要 知道 SEO 的优化知识,因为你写的页面要对搜索引擎也要友好,要结构合理。 你还要 了解 SQL 和数据库,最好还要了解 C#等后台编程的语言。两个主要原 因,要全面的提高自己,而且要充分的理解面向对象的编程,这些传统语言的 思想更成熟, 但要知道 Javascript 跟这些传统的编程语言的继承机制是不一 样的。所以不要用 Javascr
19、ipt 来写 C#。还有一个重要的原因,你要跟后台的 程 序员合作,要他们更坚决的执行你的不唐突的开发思想,你必须要经常给他 们洗脑。但是你说的话要让他们听得进去,他说的东西你要了解,而你最好也 能给他一些 有好的建议,他们才会听你的。为了我们 WEB 标准的开展,辛苦点 就辛苦点吧! 这里要补充的就是,前端开发你要自己努力学习还有 JSON 和正则表达式,目前 还没有很详细的介绍正则的书,然后就是 AJAX 程序中取代 XML 的 JSON 的数据 载体,掌握 JSON 要比 XML 容易得多。最后就是大家也是我提到过很多次的闭包 的使用,面向对象的开发的思想。 呵呵,最后就是多练习,把你学到知识运用到实际的开发中,常跟朋友多交流, 我也希望能跟大家多交流心得。大家共同进步!