首页>参考读物>计算机科学与技术>软件与程序设计

Effective JavaScript: 编写高质量JavaScript代码的68个有效方法
作者 : (美)David Herman 著
译者 : 黄博文 喻杨 译
丛书名 : Effective系列丛书
出版日期 : 2013-12-02
ISBN : 978-7-111-44623-1
定价 : 49.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 178
开本 : 16
原书名 : Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript
原出版社: Pearson Education Asia
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

图书特色

JavaScript标准化委员会著名专家撰写,亚马逊五星级畅销书,JavaScript语言之父、Mozilla CTO Brendan Eich联合数位专家鼎力推荐
作者将在JavaScript标准化委员会工作和实践的多年经验浓缩为极具实践指导意义的68个有效方法,深刻辨析JavaScript的特性和内部运作机制,以及编码中的陷阱和最佳实践


很少有像David这样的编程语言怪客能写出如此流畅、措辞浅白的文字,透过其深邃的洞察,他以一种引人入胜的方式带领我们领会JavaScript的语法和语义。一路提醒我们要特别注意的事项,并以实际使用案例来辅助说明,步调和缓而舒适。当你读完本书后,你会对JavaScript有更深入且透彻的理解。
—— Paul Irish  Google Chrome开发大使

这本书并不适合那些寻找捷径的人,恰恰相反,它是一本难得的将经验提炼为指导方法的书籍。它是一本我会毫不犹豫推荐的、为数不多的关于JavaScript的书籍。
—— Alex Russell  TC39成员, Google软件工程师

无论你写了多久的JavaScript代码,本书都有助于增进你对这个强大编程语言的理解,助你编写更可预测、更可靠且更具维护性的程序。作者David Herman拥有多年Ecma的JavaScript标准化委员会工作经验,他以前所未见的深度阐明JavaScript语言的内部运作机制——帮助你充分利用JavaScript语言的表现力。本书基于JavaScript标准的最新版本,提供未来数年能久经考验的技术和最佳实践。

通过本书归纳的68个行之有效的方法和大量具体实例,你将学到如何选择正确的编程风格、管理一些超出意料的问题以及成功使用JavaScript编程完成从数据结构到并发的方方面面。

主要特性包括:
更好地使用基于原型的面向对象编程方式;
数组和字典对象的微妙区别和解决方案;
JavaScript函数和变量作用域语义方面的精确、务实的解说;
一些有用的JavaScript编程模式和惯用法,比如选项对象和方法链;
使用JavaScript独特的“运行到完成”的方式深入阐释并发。


作者简介
David Herman 资深JavaScript技术专家,Ecma TC39委员会成员,负责JavaScript的标准化工作。他拥有格林内尔学院的计算机科学学士学位和美国东北大学的计算机科学硕士及博士学位,现在Mozilla研究院担任高级研究员。


图书前言

学习一门编程语言,需要熟悉它的语法、形式和结构,这样我们才能编写合法的、符合语义的、具有意义和行为正确的程序。但除此之外,掌握一门语言需要理解其语用,即使用语言特性构建高效程序的方法。后一种范畴是特别微妙的,尤其是对JavaScript这样一种灵活而富有表现力的编程语言来说。
  这是一本关于JavaScript语用学的书。这不是一本入门书籍,我假设你在一定程度上熟悉了JavaScript和通常的编程。很多优秀的JavaScript入门书籍可供参考,例如,Douglas Crockford的《JavaScript: The Good Parts》和Marijn Haverbeke的《Eloquent JavaScript》。本书的目的是帮助你加深理解如何有效地使用JavaScript构建更可预测、可靠和可维护的JavaScript应用程序和库。
JavaScript与ECMAScript
  在深入本书之前澄清一些术语是有必要的。这是一本关于举世皆知的JavaScript编程语言的书籍。然而,官方标准定义的规范的描述是一门称该语言为ECMAScript。历史很令人费解,但这可以归结为版权问题:出于法律原因,Ecma国际标准化组织不能使用“JavaScript”作为其标准名称。(更糟的是,标准化组织将其原来的名称ECMA(欧洲计算机制造商协会的英文首字缩写)改为不是全大写的Ecma国际标准化组织。彼时,ECMAScript这个名字大约也是早已注定。)
  正式来说,当人们提到ECMAScript时,通常是指由Ecma国际标准化组织制定的“理想”语言。与此同时,JavaScript这个名字意味着来自语言本身的所有事物,例如某个供应商特定的JavaScript引擎。通常情况下,人们经常交替使用这两个术语。为了保持清晰度和一致性,在本书中,我将只使用ECMAScript来谈论官方标准,其他情况,我会使用JavaScript指代语言。我还会使用常见的缩写ES5来指代第5版的ECMAScript标准。
关于Web
  避开Web来谈JavaScript是很难的。到目前为止,JavaScript是唯一为用于客户端应用程序脚本的所有主流浏览器提供内置支持的编程语言。此外,近年来,随着Node.js平台的问世,JavaScript已经成为一个实现服务器端应用程序的流行编程语言。
  不过,本书是关于JavaScript而非Web的编程。有时,谈论一些Web相关的例子和应用程序的概念是帮助读者理解。但是,这本书的重点是JavaScript语言的语法、语义和语用,而不是Web平台的API和技术。
关于并发
  JavaScript一个新奇的方面是在并发环境中其行为是完全不明朗的。ECMAScript标准(包括第5版)关于JavaScript程序在交互式或并发环境中的行为只字未提。第7章涉及并发,因此,我只是从技术角度介绍一些非官方的JavaScript特性。但实际上,所有主流的JavaScript引擎都有一个共同的并发模型。尽管在标准中未提及并发,但是致力于并发和交互式的程序是JavaScript编程的一个核心概念。事实上,未来版本的ECMAScript标准可能会正式地标准化这些JavaScript并发模型的共享方面。
致谢
  这本书在很大程度上要归功于JavaScript的发明者——Brendan Eich。我深深感谢Brendan邀请我参与JavaScript标准化工作,以及他对我在Mozilla的职业生涯中给予的指导和支持。
  本书中的大部分材料是受优秀的博客文章和在线论文的启发。我从Ben“cowboy”Alman、Erik Arvidsson、Mathias Bynens、Tim“creationix”Caswell、Michaeljohn“inimino”Clement、Angus Croll、Andrew Dupont、Ariya Hidayat、Steven Levithan、Pan Thomakos、Jeff Walden,以及Juriy“kangax”Zaytsev的博客中学到很多东西。当然,本书的最终资源来自ECMAScript规范。ECMAScript规范自第5版以来由Allen Wirfs-Brock不知疲倦地编辑和更新。Mozilla开发者网络仍然是JavaScript API和特性最令人印象深刻的、高品质在线资源之一。
  在策划和写作这本书的过程中,我有许多顾问。在我开始写作之前,John Resig就以作者的角度给了我很多有用的建议。Blake Kaplan和Patrick Walton帮我在早期阶段整理我的想法和规划出这本书的组织结构。在写作的过程中,我从Brian Anderson、Norbert Lindenberg、Sam Tobin-Hochstadt、Rick Waldron和Patrick Walton那里得到了很好的建议。
  很高兴能够和Pearson的工作人员共事。Olivia Basegio、Audrey Doyle、Trina MacDonald、Scott Meyers和Chris Zahn一直关注我提出的问题,对我的拖延报以耐心,并通融我的请求。我无法想象还能有一个更愉快的写作经历。我对能为Effective系列写一本书感到非常荣幸。因为很久以前我就是《Effective C++》的粉丝,我曾经怀疑我是否有亲自书写一本Effective系列书籍的荣幸。
  我也简直不敢相信自己有这样的好运气,能够找到梦之队一样的技术编辑。我很荣幸Erik Arvidsson、Rebecca Murphey、Rick Waldron和Richard Worth同意编辑这本书,他们为我提供了许多宝贵的批评和建议。他们多次纠正了书中一些真正令人尴尬的错误。
  写一本书比我预想的要难得多。如果不是朋友和同事的支持,我可能已经失去了勇气。在我怀疑自己的时候,Andy Denmark、Rick Waldron和Travis Winfrey总是给予我鼓励。
  我绝大部分时候是在旧金山柏丽附近的神话般的Java Beach咖啡厅里写作这本书的。那里的工作人员都知道我的名字,并且我还没点餐之前,他们就知道我想要点什么。我很感谢他们提供了一个舒适的工作场所,并给我提供食物和咖啡。
  我的毛茸茸的猫科小友Schmoopy为本书做出了它的最大贡献。至少,它不停地跳上我的膝盖,坐在屏幕前(有可能是笔记本电脑比较温暖)。Schmoopy自2006年以来一直是我的忠实伙伴,我不能想象我的生活能离得开这个小毛球。
  我的整个家庭对这个项目从开始到结束一直都很支持和激动。遗憾的是,我无法在我的爷爷和奶奶(Frank和Miriam Slamar)去世之前和他们分享这本书的成品。但他们会为我感到激动和自豪,而且本书中有一小段我儿时与爷爷Frank编写BASIC程序的经历。
  最后,我要感谢我一生的挚爱Lisa Silveria,我对她的付出无以为报。

专家评论

“这是一本绝不辜负Effective软件开发系列期望的编程书籍。对于任何一个想要做到严谨编程的JavaScript开发者来说,这本书绝对不容错过。这本书阐述了JavaScript内部工作的一些细节,以期帮助读者更好地利用JavaScript语言优势。”
    ——Erik Arvidsson,高级软件工程师
  “很少有像David这样的编程语言极客能如此舒适、友好地讲解编程语言。他带领我们领会JavaScript语法和语义,这个过程既令人陶醉又极其深刻。本书以舒适的节奏额外提供了一些“有问题”的现实案例。当你读完本书后,你会感觉自己获得了一种强大而全面的掌控能力。”
    ——Paul Irish,Google Chrome开发主管
  “在阅读本书之前,我以为它只是另一本关于如何更好地使用JavaScript编程的书籍。然而本书远不止如此,它还会使你更深入地理解JavaScript这门语言,这是至关重要的。如果没有这层对JavaScript的深入理解,那么你绝不会懂得语言本身的任何东西,只知道其他的程序员是如何编写代码的。”
  “如果你想成为一名真正优秀的JavaScript开发者,那么请阅读本书。就我来说,我多么希望在第一次开始JavaScript编程时就已经阅读了它。”
    ——Anton Kovalyov,JSHint开发者
  “如果你正在寻找一本正式且极具可读性的并极具洞察力的JavaScript语言的书籍,那不用舍近求远了。JavaScript开发者能够从其中找到珍贵的知识宝藏,甚至技术精湛的JavaScript程序员也一定能从中获益。对于有其他语言经验而想一头扎进JavaScript世界的从业人员来说,本书是迅速学习JavaScript的必读之物。然而,不管你的背景如何,但都不得不承认作者Dave Herman在探索JavaScript方面做得非常棒——JavaScript的优美部分、不足部分或介于两者之间的所有内容都囊括于本书之中。”
    ——Rebecca Murphey,Bocoup高级JavaScript开发者
  “对于任何一位理解JavaScript并且想要完全掌握它的人员来说,本书是必不可少的读物。Dave Herman带给了读者深刻的、具有研究和实践意义的JavaScript语言理解,通过一个接一个的例子指导并帮助读者达到与他同样的理解高度。这不是一本寻求捷径的书籍,恰恰相反,是一本难得的将经验提炼为指南的书籍。它是一本为数不多让我毫不犹豫推荐的关于JavaScript的书籍。”
    ——Alex Russell,TC39成员,Google软件工程师
  “很少有人有机会同大师一起学习他们的手艺。这本书弥补了这种遗憾,其对JavaScript的研究就像随一位时间旅行哲学家回到公元前5世纪与柏拉图一同学习。”
    ——Rick Waldron,JavaScript传教士,Bocoup

上架指导

计算机\程序设计

封底文字

“很少有像David这样的编程语言怪客能写出如此流畅、措辞浅白的文字,透过其深邃的洞察,他以一种引人入胜的方式带领我们领会JavaScript语法和语义。一路提醒我们要特别注意的事项,并以实际使用案例来辅助说明,步调和缓而舒适。当你读完本书后,你会对JavaScript有更深入且透彻的理解。”
——Paul Irish, Google Chrome开发大使

“这本书并不适合那些寻找捷径的人,恰恰相反,是一本难得的将经验提炼为指导方法的书籍。它是一本我会毫不犹豫推荐的、为数不多的关于JavaScript的书籍。”
——Alex Russell, TC39成员, Google软件工程师

无论你写了多久的JavaScript代码,本书都有助于增进你对这个强大编程语言的理解,助你编写更可预测、更可靠且更具维护性的程序。作者David Herman拥有多年Ecma的JavaScript标准化委员会工作经验,他以前所未见的深度阐明JavaScript语言的内部运作机制——帮助你充分利用JavaScript语言的表现力。本书基于JavaScript标准的最新版本,提供未来数年能久经考验的技术和最佳实践。

通过本书归纳的68个行之有效的方法和大量具体实例,你将学到如何选择正确的编程风格、管理一些超出意料的问题以及成功使用JavaScript编程完成从数据结构到并发的方方面面。主要特性包括:
 更好地使用基于原型的面向对象编程方式;
 数组和字典对象的微妙区别和解决方案;
 JavaScript函数和变量作用域语义方面的精确、务实的解说;
 一些有用的JavaScript编程模式和惯用法,比如选项对象和方法链;
 使用JavaScript独特的“运行到完成”的方式深入阐释并发。

作者简介

(美)David Herman 著:暂无简介

译者简介

黄博文 喻杨 译:暂无简介

译者序

虽然JavaScript在诞生之初由于商业原因及缺乏规范,一直饱受诟病。但是随着时间的推移,人们已经逐渐走出了对这门语言的偏见和误解,开始领略它那强大的语言特性威力。当下JavaScript语言大红大紫,研究讨论JavaScript的相关书籍早已汗牛充栋,但是这本书作为Effective软件开发系列中的一员,却是不可或缺的。
  学会编写JavaScript程序容易,但要成为专家却实属不易。一方面是由于JavaScript语言的设计思想与Java、C#等大众语言区别很大,另一方面是由于其设计时的仓促性导致JavaScript语言本身精华与糟粕并存。本书的作者David Herman作为JavaScript标准化的参与者,在书中自然对JavaScript的精华和糟粕都进行了深入阐述,并且给出了很多实用的建议。这些建议都来自于第一线的实践经验,无论是初学者还是高级程序员,都可以从中吸收养分,进而快速成长。
  本书深入阐述了JavaScript语言,通过它可以了解到如何有效地编写出高移植性、健壮的程序和库。本书传承了Effective软件开发系列的简明场景驱动风格,通过提示、技术及实用的示例代码解释JavaScript中的重要概念。
  全书共涉及68条关于JavaScript程序设计的建议。第1章可以让初学者快速熟悉JavaScript,了解JavaScript中的原始类型、隐式强制转换、编码类型等基本概念;第2章着重讲解了有关JavaScript的变量作用域的建议,不仅介绍了怎么做,还介绍了操作背后的原因,帮助读者加深理解;第3章和第4章的主题涵盖函数、对象及原型三大方面,这可是JavaScript区别于其他语言的核心,读者也不必紧张,在David Herman大叔的指引下,你可以轻松掌握这些核心内容,了解到业界最佳实践;第5章则阐述了数组和字典这两种容易混淆的常用类型及具体使用时的建议,避免陷入一些陷阱;第6章讲述了库和API设计;第7章讲述了并行编程,这是晋升为JavaScript专家的必经之路。
想要深入了解JavaScript并获取一线专家的宝贵经验吗?那么,这本书正好适合你。
  我和同事喻杨在翻译这本书的过程中投入了不少精力,生怕给这本经典之作留下一些遗憾。感谢机械工业出版社华章分社的编辑们对我们的支持。
  最后,希望本书能给大家带来一次超凡的阅读体验。

黄博文

图书目录

本书赞誉
译者序

前言
第1章 让自己习惯JavaScript  1
第1条:了解你使用的JavaScript
版本  1
第2条:理解JavaScript的浮点数  6
第3条:当心隐式的强制转换  8
第4条:原始类型优于封装对象  13
第5条:避免对混合类型使用==运算符  14
第6条:了解分号插入的局限  16
第7条:视字符串为16位的代码单元序列  21
第2章 变量作用域  25
第8条:尽量少用全局对象  25
第9条:始终声明局部变量  27
第10条:避免使用with  28
第11条:熟练掌握闭包  31
第12条:理解变量声明提升  34
第13条:使用立即调用的函数表达式创建局部作用域  36
第14条:当心命名函数表达式笨拙的作用域  38
第15条:当心局部块函数声明笨拙的作用域  41
第16条:避免使用eval创建局部变量  43
第17条:间接调用eval函数优于直接调用  44
第3章 使用函数  46
第18条:理解函数调用、方法调用及构造函数调用之间的不同  46
第19条:熟练掌握高阶函数  48
第20条:使用call方法自定义接收者来调用方法  51
第21条:使用apply方法通过不同数量的参数调用函数  53
第22条:使用arguments创建可变参数的函数  54
第23条:永远不要修改arguments对象  56
第24条:使用变量保存arguments的引用  58
第25条:使用bind方法提取具有确定接收者的方法  59
第26条:使用bind方法实现函数柯里化  61
第27条:使用闭包而不是字符串来封装代码  62
第28条:不要信赖函数对象的toString方法  63
第29条:避免使用非标准的栈
检查属性  65
第4章 对象和原型  67
第30条:理解prototype、getPrototype Of和__proto__之间的不同  67
第31条:使用Object.getPrototypeOf函数而不要使用__proto__属性  69
第32条:始终不要修改__proto__属性  70
第33条:使构造函数与new操作符无关  71
第34条:在原型中存储方法  73
第35条:使用闭包存储私有数据  75
第36条:只将实例状态存储在实例对象中  76
第37条:认识到this变量的隐式绑定问题  78
第38条:在子类的构造函数中调用父类的构造函数  81
第39条:不要重用父类的属性名  84
第40条:避免继承标准类  86
第41条:将原型视为实现细节  88
第42条:避免使用轻率的猴子补丁  88
第5章 数组和字典  91
第43条:使用Object的直接实例构造轻量级的字典  91
第44条:使用null原型以防止原型污染  94
第45条:使用hasOwnProperty方法以避免原型污染  95
第46条:使用数组而不要使用字典来存储有序集合  99
第47条:绝不要在Object.prototype中增加可枚举的属性  102
第48条: 避免在枚举期间修改对象  103
第49条:数组迭代要优先使用for循环而不是for...in循环  108
第50条:迭代方法优于循环  109
第51条:在类数组对象上复用通用的数组方法  113
第52条:数组字面量优于数组构造函数  114
第6章 库和API设计  116
第53条:保持一致的约定  116
第54条:将undefined看做“没有值”  117
第55条:接收关键字参数的选项对象  121
第56条:避免不必要的状态  125
第57条:使用结构类型设计灵活的接口  127
第58条:区分数组对象和类数组对象  130
第59条:避免过度的强制转换  134
第60条:支持方法链  137
第7章 并发  140
第61条:不要阻塞I/O事件队列  140
第62条:在异步序列中使用嵌套或命名的回调函数  143
第63条:当心丢弃错误  147
第64条:对异步循环使用递归  150
第65条:不要在计算时阻塞事件队列  153
第66条:使用计数器来执行并行操作  156
第67条:绝不要同步地调用异步的回调函数  160
第68条:使用promise模式清洁异步逻辑  162

教学资源推荐
作者: 陈秋劲
作者: [美]布鲁斯·埃克尔(Bruce Eckel) 戴安娜·马什(Dianne Marsh) 著
作者: Frank L. Friedman;Elliot B. Koffman
作者: 邱李华 曹青 郭志强 编著
参考读物推荐
作者: Bill Dudney, Stephen Asbury, Joseph K.Krozak, Kevin Wittkopf
作者: Richard Anderson Chris Blexrud
作者: 快学习教育 编著