下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922
读书 > Web开发 >Javascript > Effective JavaScript: 编写高质量JavaScript代码的68个有效方法

Effective JavaScript: 编写高质量JavaScript代码的68个有效方法

综合评级:★★★★★

定价:49.00

作者:(美)赫尔曼 著,黄博文,喻杨 译

出版社:机械工业出版社

出版日期:2014年1月

页数:164

ISBN:9787111446231

书籍介绍
Effective系列丛书经典著作,亚马逊五星级畅销书,Ecma的JavaScript标准化委员会著名专家撰写,JavaScript语言之父、Mozilla CTO Brendan Eich作序鼎力推荐!作者凭借多年标准化委员会工作和实践经验,深刻辨析JavaScript的内部运作机制、特性、陷阱和编程最佳实践,将它们高度浓缩为极具实践指导意义的68条精华建议。 本书共分为7章,分别涵盖JavaScript的不同主题。第1章主要讲述最基本的主题,如版本、类型转换要点、运算符注意事项和分号局限等。第2章主要讲解变量作用域,介绍此方面的一些基本概念,以及一些最佳实践经验。第3章主要讲解函数的使用,深刻解析函数、方法和类,并教会读者在不同的环境下高效使用函数。第4章主要讲解原型和对象,分析JavaScript的继承机制以及原型和对象使用的最佳实践和原则。第5章主要介绍数组和字典,阐述将对象作为集合的用法以及使用数组和字典的一些陷阱。第6章介绍库和API,讲解如何设计良好的API的技巧,以清楚、简洁和明确地表达程序,并提高可重用率。第7章讲解并发,在技术上讨论一些“约定成俗”的JavaScript用法。
相关课程
目录
本书赞誉

译者序

前言

第1章 让自己习惯javaScript

 第1条:了解你使用的Javascript版本

 第2条:理解JavaScript的浮点数

 第3条:当心隐式的强制转换

 第4条:原始类型优于封装对象

 第5条:避免对混合类型使用==运算符

 第6条:了解分号插入的局限

 第7条:视字符串为16位的代码单元序列

第2章 变量作用域

 第8条:尽量少用全局对象

 第9条:始终声明局部变量

 第10条:避免使用with

 第11条:熟练掌握闭包

 第12条:理解变量声明提升

 第13条:使用立即调用的函数表达式创建局部作用域

 第14条:当心命名函数表达式笨拙的作用域

 第15条:当心局部块函数声明笨拙的作用域

 第16条:避免使用eval创建局部变量

 第17条:间接调用eval函数优于直接调用

第3章 使用函数

 第18条:理解函数调用、方法调用及构造函数调用之间的不同

 第19条:熟练掌握高阶函数

 第20条:使用call方法自定义接收者来调用方法

 第21条:使用apply方法通过不同数量的参数调用函数

 第22条:使用arguments创建可变参数的函数

 第23条:永远不要修改arguments对象

 第24条:使用变量保存arguments的引用

 第25条:使用bind方法提取具有确定接收者的方法

 第26条:使用bind方法实现函数柯里化

 第27条:使用闭包而不是字符串来封装代码

 第28条:不要信赖函数对象的toString方法

 第29条:避免使用非标准的栈

 检查属性

第4章 对象和原型

 第30条:理解prototype、getPrototype Of和__proto__之间的不同

 第31条:使用Object.getPrototypeOf函数而不要使用__proto__属性

 第32条:始终不要修改__proto__属性

 第33条:使构造函数与new操作符无关

 第34条:在原型中存储方法

 第35条:使用闭包存储私有数据

 第36条:只将实例状态存储在实例对象中

 第37条:认识到this变量的隐式绑定问题

 第38条:在子类的构造函数中调用父类的构造函数

 第39条:不要重用父类的属性名

 第40条:避免继承标准类

 第41条:将原型视为实现细节

 第42条:避免使用轻率的猴子补丁

第5章 数组和字典

 第43条:使用Object的直接实例构造轻量级的字典

 第44条:使用null原型以防止原型污染

 第45条:使用hasOwnProperty方法以避免原型污染

 第46条:使用数组而不要使用字典来存储有序集合

 第47条:绝不要在Object.prototype中增加可枚举的属性

 第48条:避免在枚举期间修改对象

 第49条:数组迭代要优先使用for循环而不是for...in循环

 第50条:迭代方法优于循环

 第51条:在类数组对象上复用通用的数组方法

 第52条:数组字面量优于数组构造函数

第6章 库和API设计

 第53条:保持一致的约定

 第54条:将undefined看做“没有值”

 第55条:接收关键字参数的选项对象

 第56条:避免不必要的状态

 第57条:使用结构类型设计灵活的接口

 第58条:区分数组对象和类数组对象

 第59条:避免过度的强制转换

 第60条:支持方法链

第7章 并发

 第61条:不要阻塞I/O事件队列

 第62条:在异步序列中使用嵌套或命名的回调函数

 第63条:当心丢弃错误

 第64条:对异步循环使用递归

 第65条:不要在计算时阻塞事件队列

 第66条:使用计数器来执行并行操作

 第67条:绝不要同步地调用异步的回调函数

 第68条:使用promise模式清洁异步逻辑

前言
前  言

学习一门编程语言,需要熟悉它的语法、形式和结构,这样我们才能编写合法的、符合语义的、具有意义和行为正确的程序。但除此之外,掌握一门语言需要理解其语用,即使用语言特性构建高效程序的方法。后一种范畴是特别微妙的,尤其是对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,我对她的付出无以为报。

热门图书
推荐新闻
技术文库
论坛推荐