又很久没写东西了 ,写上一篇的时候还觉得接下来的工做会轻松一些 ,结果未从我所愿呐 ,又是一阵忙碌。而这段时间穿插着作了不少12年淘宝校园招聘的前端面试 ,不少同窗都有问到 ,学校里没有前端的课程 ,那如何学习JavaScript?javascript
个人回答是:读书吧!相对于在网上学习 ,在项目中学习和跟着有经验的同事学习 ,书中有着相对完整的知识体系 ,每读一本好书都会带来一次全面的提升。而若是深一脚浅一脚的学习 ,写出代码的质量会良莠不齐。初学者的首要任务是成为靠谱的熟练开发者 ,可以稳定的输出有必定质量的代码 ,这样才能让人放心的把任务交给你。从这个角度来看 ,跟着w3school类成体系的网络教程学习也是不错的选择 ,只不过我没有亲自实践过。css
在07年以前 ,我是在作IEonly的企业级B/S应用 ,虽然当时项目的JScript就已经很是复杂 ,但当时团队里有不少经验丰富的同事 ,可能是跟他们请教 ,或者再MSDN和网上找答案。07年进入阿里以后 ,开始直面兼容性问题 ,同时开始单打独斗 ,这个阶段开始接触相关的前端书籍 ,最早购买的是《JavaScript高级程序设计》和《JavaScript DOM 编程艺术》。能够说比较幸运 ,挑中了这两本很靠谱的书(其实当时市面上书籍并很少 ,感谢选择出版这些书和翻译这些书的同窗们) ,近来这两本书都出了第二版其生命力可见一斑。html
这几年来 ,自认读的前端方面的书不算少 ,校招同窗们问到有什么书推荐 ,我仍是会列几个批次的书籍出来给你们 ,在这里公布一下 ,无法说这是最优学习路线 ,但真看进去了得到一个IT民工从业资格是没啥问题的。咱也先秀下书架吧(喜欢纸质书 ,能够翻旧 ,能够涂涂写写 ,能够折上几个页角 ,能够歪在一边用任何得劲儿的姿式看):前端
说说我对于书的选择 ,在从高级程序设计以及DOM编程艺术得到了较好的用户体验以后 ,基本上延续了选择译著的路子 ,属顺势而为倒没有什么特殊的因素在里头。而我通常不会推荐英文原版书 ,中文更具亲和力 ,JavaScript并非一门多么高深的语言 ,我相信译者是能够在深入理解原文的基础上作翻译的。我也会读一些外文书 ,而每每当我知道一本不错的书籍有了出版计划 ,就会中止精读 ,等译做出版(好比不久前的《高性能JavaScript》)。不过确实有时会遇到术语翻译不一致甚至翻译的不通顺的状况 ,好在多书网上能够找到英文电子版 ,实在不解之处对照一下也就能够了。java
下面都是我精读过且以为不错的书 ,先分分类再逐本分享下个人读书心得:web
第一批次:入门级 ,也适合想掌握一些前端技能的非前端工程师。面试
《JavaScript DOM 编程艺术》正则表达式
第二批次:成为一名合格的前端工程师编程
《JavaScript高级程序设计》(或《JavaScript权威指南》)设计模式
《精通JavaScript》
第三批次:更优秀的代码 ,更优良的设计
《JavaScript语言精粹》
第四批次:从语言细节到复杂工程实践 ,想开发靠谱的各种底层代码 ,应该看看
《Secrets of the JavaScript Ninja》
《JavaScript Patterns》
《ECMA-262 in Detail》
应该重视跟踪阅读一些大牛们的Blog了(伯乐在线编注:这篇文章《你得学JavaScript》中有推荐两位大牛的博客,Douglas Crick的博客 和 Angus Croll的JavaScript博客。)
一直在等待:一本JavaScript语言做者或引擎实现者写的书。
番外篇:各种专题书籍 ,读好第二批次书籍以后 ,有精力就接触下
《高性能网站建设指南》
《高性能JavaScript》
《Ajax实战》
《jQuery实战》
《精通CSS》(或《CSS权威指南》)
《正则表达式必知必会》(或《正则表达式权威指南》)
应该选择:一本HTML5方面的书
应该选择:一本NodeJS方面的书
《JavaScript DOM 编程艺术》
话说这本书的中文标题有一些标题党的 ,当初若是知道这仅是一本入门书籍 ,我是不会买来的。拿到后一天就看完了 ,对我来讲没有太多技能上的实质帮助。不过这个书语言很流畅 ,重要的是对知识深浅度把握的很好 ,html/js/css/dom各个方面都把握在一个合适的度 ,这很符合我对书籍指望 ,一步步走 ,每一步都踏踏实实。
这本书经过几个实例 ,按部就班的介绍了前端开发的方方面面 ,让你们可以了解前端的技术体系概况 ,又能具有了一些简单的动手能力。若是你们对我以前写过的浏览器端技术体系概览 — 前端开发的七种武器有些感受 ,那读读这本书正好能上手实践一把。
去年淘宝前端懒懒交流会的豆瓣小站上作了一个调查 ,若是非要您推荐一本适合新人学习的js方面的书,您的推荐是什么?虽然投票的人很少 ,但这本书倒是遥遥领先。
《JavaScript高级程序设计》
这本书的初版很全面且不枯燥的书籍 ,年纪轻轻的NCZ有这样的大做难能难得。读懂这本书 ,前端技能又能够上一个台阶 ,基本上能够成为专业的前端工程师了。
对于当时的我来说 ,这本书及时的补充了浏览器兼容性方面的知识 ,特别是事件相关的知识 ,这个浏览器间差异最大。有些内容讲的很是简单明了 ,好比call和apply的用法 ,以前老是理解很差 ,NCZ几句话+一个例子就说明白了。
然而做为全面型的书籍 ,初版也是有一些问题的:
1. 闭包只半页篇幅 ,没说清楚。
2. 匿名函数没怎么讲。
3. 全书没提到constructor ,更别说hasOwnProperty ,__proto__。
这带来了我以前说的深一脚浅一脚的困扰 ,这些知识基本上是经过《JavaScript权威指南》阅读中补充的 ,固然当时版本的权威指南也有一样的问题 ,好比它没解释instanceof。也没提到__proto__。这形成了我对面向对象理解的不全面 ,当时在作了N多测试后还很蛋疼的写了一篇博文<JavaScript constructor和instanceof,JSOO中的一对欢喜冤家> ,后来接触到《JavaScript设计模式》关于OO的全面论述以后 ,果断删掉了这篇JY。
相信这本书的第二版 ,以及权威指南的第六版确定会在这些方面进行补充。不过这两本书都是十足的大部头 ,高级程序设计第二版已经比权威指南去除附录要厚了。
一本全面且不枯燥的书太难找了 ,因此我仍是喜欢初版。对我技术上的提高帮助很是之大。忍不住再秀一张图(当时在封闭开发Alimama。com ,马云时常来 ,他不愿在书的第一页签名搞得好像他写的 ,因而把签名画在了第二页。)
我会把书籍分红两类 ,一类是全面型 ,一类是犀利型。前面介绍了一本全面型的书籍 ,接下来介绍的这本的特色是很是犀利 ,这类书籍的特色是做者能找对重点(2/8原则掌握的很好) ,在重点位置深刻挖掘。这本书的做者John Resig也是jQuery的做者 ,他显然是个足够犀利的人儿。
jQuery从未承诺解决全部问题 ,但再一些重点部位的突破 ,让这个类库如此流行。这本书并无着重介绍jQuery ,仍是基于原生的JavaScript和DOM API。
列一些这本书的重点话题 ,可以很好的看出做者为何会开发出jQuery ,或者说jQuery为何是如今的样子:
1. 如何建立可复用的代码?如何调试 ,测试?(这是基础)
2. 如何判断DOM什么时候加载完毕?如何遍历 ,修改DOM?(jQuery以DOM为核心 ,节点的增删改查 ,事件响应是重点)
3. 如何肯定元素的位置 ,相对于页面/屏幕?如何作平滑的动画?(思考下CSS相关的话题不少 ,做者为何选了这两个?)
4. 如何改进表单验证 ,封装完整的Ajax程序?(涉及数据交互 ,是另外一个重中之重。)
不算厚的一本书 ,基本上就是以上的话题+几个实例。当咱们看过了一本全面型的书籍 ,对前端的知识有了深刻的了解以后 ,这本书的做者指出了从此的重点 ,并告诉你们如何把知识用到解决重点问题上。
推荐你们看看阮一峰老师的博文《JavaScript诞生记》,JavaScript是Brendan Eich大神10天时间设计出的语言 ,如今成了Web前端领域的惟一语言。
一方面这门语言博采众家之长 ,也帮助它维系了长久的生命力:
“1. 借鉴C语言的基本语法;
2. 借鉴Java语言的数据类型和内存管理;
3. 借鉴Scheme语言,将函数提高到”第一等公民”(first class)的地位;
4. 借鉴Self语言,使用基于原型(prototype)的继承机制。”
另外一方面”因为设计时间过短,语言的一些细节考虑得不够严谨,致使后来很长一段时间,Javascript写出来的程序混乱不堪。”Brendan Eich对其这10天工做的评价是:”它的优秀之处并不是原创,它的原创之处并不优秀。”
Douglas Crockford经过《JavaScript: The Good Parts》这本书对JavaScript进行了一次大审判 ,老道认为JavaScript语言有不少优秀的地方 ,也有一些鸡肋和糟粕。老道不反对用这门语言 ,在规避一些鸡肋和糟粕以后它天然是优秀的。
老道认为JavaScript优美的特性以下:
1. 函数是头等对象(能够做为其余函数的参数和返回值 ,支持闭包)
2. 基于原型继承的动态对象
3. 对象字面量和数组字面量(构成JSON的基础)
老道列出了不少鸡肋和糟粕 ,并提供了JSLint这个工具 ,来校验代码是否使用了很差的部分。书中给出的语法图让我有深刻学习一下<编译原理>的冲动 ,也理解了JSLint做为用JS语言分析JS语言的工具成型的理论基础。
强烈建议你们使用JSLint来检测本身的代码 ,可是咱们没必要教条 ,能够违返其中一些的检测规则 ,只要咱们清楚老道为何会设置这个规则 ,有什么风险?若咱们不遵照这个规则 ,是否能回避相应的风险。
我以为这本书最重要的意义是告诉咱们为何”它是鸡肋 ,它是糟粕”这是通过前面的学习和大量实践以后 ,成熟的开发者应该关注的。好比:
1. hasOwnProperty ,老道说它糟粕的缘由是由于这不是一个关键字 ,而是一个Object。prototype上能够被重写的方法。那么这个告诉咱们 ,并非不要用hasOwnProperty ,而是要注意不要覆盖它。
2. eval的主要问题是性能 ,大量的eval(类eval)语句下降了JS引擎的性能。而通过测试少许的eval语句+eval大段的JS文本性能并不差 ,有必要也能够考虑使用。
这是一本介绍JavaScript面向对象编程以及设计模式很是好的书籍。相对于又一本全面型书籍语言精粹 ,犀利型书籍登场了。
我对面向对象的见解是:隐藏细节 ,方便作大。基于良好的抽象和封装 ,咱们能够方便的自顶而下的设计 ,自底而上的开发。面向对象的优缺点不是本文的重点 ,这里不讨论 ,只能说这是一个很是不错的代码设计实现方法论。
JavaScript究竟是不是一个面向对象的语言 ,从本质说必定是的 ,从表象来讲OO的不那么明显。咱们必须经过一些额外的代码实现诸如 ,划分公有/私有 ,接口 ,继承 ,多态等特性。因为JavaScript语言的灵活性 ,实现的方式很是多。这本书的第一部分对常见的两类实现模式:类式继承和原型继承都有很是好的最佳实践总结。因此个人想法是彻底读懂它 ,而后按照这个来作就行了。若是这里介绍的实践足够强大 ,咱们没有必要发明新的继承实现模式了 ,事实上YUI一直是这种模式 ,而新的JavaScript引擎甚至引入了Object。create方法 ,将一些动做写入标准内置在JS引擎中。
咱们应该将视点放在设计模式上 ,GoF的设计模式那本书里的例子 ,对于前端开发来讲并不都是很好理解 ,而这本书的例子所有是前端相关 ,有助于你们理解设计模式的精妙。还有些同窗说 ,即便我不了解GoF的理论 ,我也在默默的用这些模式了。确实是这样 ,但我想咱们关注设计模式 ,不光要学会各类模式是怎样的 ,更重要的是学习到各类模式适合什么场合 ,不适合什么场合。了解有什么优势 ,也要了解有什么缺点 ,你正在默默使用的模式存在隐患么?系统学习以后会对其更有把握。
前几天听同事说这本书全面断货 ,不知道是太火 ,仍是印的太少 ,但愿能尽快看到上架。
Secrets of the JavaScript Ninja
进入第四个批次 ,这里的书籍多数没有中译本出版。现阶段想开发靠谱的底层类库代码 ,确实须要啃一些外文书了。英文书不少 ,没有精力大量阅读 ,一般读一些口碑较好的书籍。
另外 ,到了这个批次 ,个人阅读量也至关的有限 ,因此确定有不少好的内容没有提到 ,指望你们能继续推荐。并且到了这个批次 ,书籍产出确定跟不上知识的更新速度 ,跟踪阅读一些JS大牛们的Blog应该成为习惯。
这是jQuery做者的第二本书 ,天然优点犀利型的表明。John Resig已经陆续放出这本书的大部份内容 ,从2008年开始写 ,计划2012年5月出版。
若是说JR的第一本书可以看出为何有jQuery ,那么这本书能看出让jQuery发展下去 ,做者关注了哪些。咱们会看到其实一些很细节的内容 ,好比强调测试用例的构建/自动化测试的方法 ,好比如何利用每一个function实例的length属性 ,好比对with ,eval的思考和发散等等。
关于这本书具体如何的好处 ,我还理不清 ,拿来开开眼界是很是不错的。记得玉伯大大组织了一波同窗在翻译 ,不知进展如何了。
《JavaScript Patterns》
乍一看这本书标题 ,觉得又是一本讲设计模式的书 ,那和《JavaScript设计模式》重复了 ,开始没有仔细关注。今年拔赤推荐了它 ,才发现者并不只仅介绍GoF的设计模式而是涵盖前端开发各个方面的先进理论。虽然是09年的书,这两年前端的不少较深入变化在这边书里都能看到雏形。上一本书犀利,这本更全面。
做者Stoyan Stefanov是Yahoo的前端技术专家 ,从这本书中能够看到不少YUI3设计上的本源 ,好比在对象建立模式中介绍的模块模式/沙箱模式。近来CommonJS Loader的流行在这之上的继续深刻发掘。这本书还包括代码测试 ,打包 ,部署 ,加载策略等各个流程中的诸多细节 ,这些构成了完整的体系在Yahoo在YUI3都有很是好的实践。
据说咱们的同事拔赤和一舟在翻译这个本书 ,很是期待。
这不是一本书 ,是俄罗斯小伙子写的一系列ECMA-262标准分析文章 ,ECMA-262-3系列已经很完整。标准像汇编语言同样枯燥 ,而这系列文章把枯燥的标准转化为一系列深刻讨论的话题 ,配合恰到好处的示例 ,必定会让你们对JS引擎的认识再上一层。
网上有一些译文 ,可是因为相似文章译文比较少 ,不少英文还未达成一致表述 ,因此推荐阅读英原文。另外做者很好 ,遇到的棘手的问题 ,去咨询他都能很快收到很好的回复。
期待:一本JavaScript语言做者或引擎实现者写的书
一直以来期待JavaScript能有一本像《C程序设计语言》这样的大做,最近也在读计算机系统概论补一些大学时没学好的知识 ,很是认同书中”自底而上”的学习路线。我想对JavaScript引擎的透彻分析 ,可以减小你们看着实验结果 ,猜想着写书的境况。随着NodeJS的火爆 ,引擎的技术分析文章愈来愈多 ,期待很快出现集大成者。
《高性能网站建设指南》《高性能网站建设进阶指南》《高性能JavaScript》
进入番外篇 ,推荐的书籍都是有针对性的领域之做 ,内容每每并不高深 ,你们根据本身的实际状况进行选择阅读。
高性能的网页是前端必然的追求 ,Steve Sounders率先在Yahoo开启了这方面的专题研究 ,伴随着《高性能网站建设指南》的出版和YSlow工具发布。网站性能优化 ,特别是前端角度和运维角度的优化方案 ,进入了人们的视野 ,同时得到了巨大的效果 ,甚至造成了名为WPO(Web Performance Optimization)产业。
第一本书除了介绍了可以立竿见影的规则的同时也开启了民智。你们开始思考如何作优化 ,如何结合本身的应用实践作优化。然后两本书基本上是遵循优化思路的继续得来的实践总结。关于优化的工具,思路,方法是我特别强调的。感兴趣的同窗能够看下在Yslow 34 Rules以后 — 网站性能优化思路和进展 这一篇。
其余领域之做
接下来介绍这些专题类书籍 ,并非特别推荐 ,每每每一个专题都有不少书籍可供选择 ,随手写一些读书心得吧。
《Ajax实战》:06年的书,很早就购入。书中介绍了不少RIA高级应用的相关话题,很开眼界。
《jQuery实战》:必定须要一本介绍jQuery的书,这书还能够,不过如今看来应该比较旧了,jQuery已经更新了不少。我主要从这本书了解了jQuery的工具函数扩展机制和插件机制是如何实现的。jQuery让彻底不了解prototype属性的同窗也能写出可复用的复杂组件,很是不容易,之后再单独写写对jQuery的一些见解吧。
《精通CSS》:必定须要一本介绍CSS的书,工做中一直以来CSS用的不是很深刻,不作特殊介绍.
《正则表达式必知必会》:必定须要一本正则方面的书籍,这本小册子查起来蛮方便.
《HTML5揭秘》和《HTML5高级程序设计》买回来一直没看,对HTML5的新增特性仍是有了解的,等能用到时再看再评。
但愿看到NodeJS方面的书籍 ,尽快引入。
写在最后
我只能推荐我看过的书对吧 ,因此你们懂的。咱们不去对比各类电子产品 ,就是对比鸡蛋大米 ,书籍都是很是廉价的。
当有了领域内必定的实践经验以后 ,阅读一本相关的书籍并非难事 ,也并不会耗费不少时间。
全面型的书籍可让你们技能水平一步一步地稳步提升 ,让你们站得高也站得稳。
犀利型的书籍可让你们了解重点 ,了解别人是怎么运用那些你也会的知识的。
专题类的书籍是拓宽眼界 ,帮助你们完成工做任务的好手。
对于非英文专业的同窗 ,若是有中译本 ,不用非得纠结着去看原版 ,咱们要最快学到知识 ,最快进入思考与实践。
感谢做者 ,译者(个人同事中有不少译者 ,都说期望这个赚钱是不可能的) ,以及选择运做这些书出版的各位老师。