发表于2024-12-24
JavaScript标准化委员会著名专家撰写,JavaScript语言之父、Mozilla CTO Brendan Eich联袂数位专家推荐
作者将在JavaScript标准化委员会工作和实践的多年经验浓缩为极具实践指导意义的68个有效方法,深刻辨析JavaScript的特性和内部运作机制,以及编码中的陷阱和实践
海报:
《Effective JavaScript:编写高质量JavaScript代码的68个有效方法》共分为7章,分别涵盖JavaScript的不同主题。第1章主要讲述最基本的主题,如版本、类型转换要点、运算符注意事项和分号局限等。第2章主要讲解变量作用域,介绍此方面的一些基本概念,以及一些实践经验。第3章主要讲解函数的使用,深刻解析函数、方法和类,并教会读者在不同的环境下高效使用函数。第4章主要讲解原型和对象,分析JavaScript的继承机制以及原型和对象使用的实践和原则。第5章主要介绍数组和字典,阐述将对象作为集合的用法以及使用数组和字典的一些陷阱。第6章介绍库和API,讲解如何设计良好的API的技巧,以清楚、简洁和明确地表达程序,并提高可重用率。第7章讲解并发,在技术上讨论一些“约定成俗”的JavaScript用法。
David Herman,资深JavaScript技术专家,Ecma TC39委员会成员,负责JavaScript的标准化工作。他拥有格林内尔学院的计算机科学学士学位和美国东北大学的计算机科学硕士及博士学位,现在Mozilla研究院担任高级研究员。
“这是一本绝不辜负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
本书赞誉
译者序
序
前言
第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模式清洁异步逻辑
第1章
让自己习惯JavaScript
JavaScript最初设计令人感觉亲切。由于其语法让人联想到Java,并且具有许多脚本语言的共同特性(如函数、数组、字典和正则表达式),因此,具有少量编程经验的人也能够快速学习JavaScript。新手程序员几乎不需要培训就可以开始编写程序,这要归功于JavaScript语言提供的为数不多的核心概念。
虽然JavaScript是如此的平易近人,但是精通这门语言需要更多的时间,需要更深入地理解它的语义、特性以及最有效的习惯用法。本书每个章节都涵盖了高效JavaScript编程的不同主题。第1章主要讲述一些最基本的主题。
第1条:了解你使用的JavaScript版本
像大多数成功的技术一样,JavaScript已经发展了一段时间。最初JavaScript作为Java在交互式网页编程方面的补充而推向市场,但它最终完全取代了Java成为主流的Web编程语言。JavaScript的普及使得其于1997年正式成为国际标准,其官方名称为ECMAScript。目前许多JavaScript的竞争实现都提供了ECMAScript标准的各种版本的一致性。
1999年定稿的第3版ECMAScript标准(通常简称为ES3),目前仍是最广泛采用的JavaScript版本。下一个有重大改进的标准是2009年发布的第5版,即ES5。ES5引入了一些新的特性,并且标准化了一些受到广泛支持但之前未规范的特性。由于ES5目前还未得到广泛支持,所以我会适时指出本书中的条款或建议是否特定于ES5。
除了ECMAScript标准存在多个版本之外,还存在一些JavaScript实现支持非标准特性,而其他的JavaScript实现却并不支持这些特性的情况。例如,许多JavaScript引擎支持const关键字定义变量,但ECMAScript标准并没有定义任何关于const关键字的语义和行为。此外,在不同的实现之间,const关键字的行为也不一样。在某些情况下,const关键字修饰的变量不能被更新。
而其他的实现只是简单地将const视为var的代名词。
由于JavaScript历史悠久且实现多样化,因此我们很难确定哪些特性在哪些平台上是可用的。而令事态更加严峻的事实是JavaScript的主要生态系统——Web浏览器,它并不支持让程序员指定某个JavaScript的版本来执行代码。由于最终用户可能使用不同Web浏览器的不同版本,因此,我们必须精心地编写Web程序,使得其在所有的浏览器上始终工作如一。
另外,JavaScript并不只是针对客户端Web编程。JavaScript的其他应用包括服务器端程序、浏览器扩展以及针对移动和桌面应用程序的脚本。某些情况下你可能需要一个特定的JavaScript版本。对于这些情况,利用特定平台支持的JavaScript特定实现的额外特性是有意义的。
本书主要关注的是JavaScript的标准特性,但是也会讨论一些广泛支持的非标准特性。当涉及新标准特性或非标准特性时,了解你的应用程序运行环境是否支持这些特性是至关重要的。否则,你可能会面临这样的困境——应用程序在你自己的计算机或者测试环境上运行良好,但是将它部署在不同的产品环境中时却无法运行。例如,const关键字在支持非标准特性的JavaScript引擎上测试时运行良好,但是,当将它部署在不识别const关键字的Web浏览器上时就会出现语法错误。
ES5引入了另一种版本控制的考量——严格模式(strict mode)。此特性允许你选择在受限制的JavaScript版本中禁止使用一些JavaScript语言中问题较多或易于出错的特性。由于其语法设计向后兼容,因此即使在那些没有实现严格模式检查的环境中仍然可以执行严格代码(strict code)。在程序中启用严格模式的方式是在程序的最开始增加一个特定的字符串字面量(literal)。
同样,你也可以在函数体的开始处加入这句指令以启用该函数的严格模式。
使用字符串字面量作为指令语法看起来有点怪异,但它的好处是向后兼容。由于解释执行字符串字面量并没有任何副作用,所以ES3引擎执行这条指令是无伤大雅的。ES3引擎解释执行该字符串,然后立即丢弃其值。这使得编写的严格模式的代码可以运行在旧的JavaScript引擎上,但有一个重要的限制:旧的引擎不会进行任何的严格模式检查。如果你没有在ES5环境中做过测试,那么,编写的代码运行于ES5环境中就很容易出错。
……
学习一门编程语言,需要熟悉它的语法、形式和结构,这样我们才能编写合法的、符合语义的、具有意义和行为正确的程序。但除此之外,掌握一门语言需要理解其语用,即使用语言特性构建高效程序的方法。后一种范畴是特别微妙的,尤其是对JavaScript这样一种灵活而富有表现力的编程语言来说。
这是一本关于JavaScript语用学的书。这不是一本入门书籍,我假设你在一定程度上熟悉了JavaScript和通常的编程。很多优秀的JavaScript入门书籍可供参考,例如,DouglasCrockford的《JavaScript:TheGoodParts》和MarijnHaverbeke的《EloquentJavaScript》。本书的目的是帮助你加深理解如何有效地使用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的发明者——BrendanEich。我深深感谢Brendan邀请我参与JavaScript标准化工作,以及他对我在Mozilla的职业生涯中给予的指导和支持。
本书中的大部分材料是受优秀的博客文章和在线论文的启发。我从Ben“cowboy”Alman、ErikArvidsson、MathiasBynens、Tim“creationix”Caswell、Michaeljohn“inimino”Clement、AngusCroll、AndrewDupont、AriyaHidayat、StevenLevithan、PanThomakos、JeffWalden,以及Juriy“kangax”Zaytsev的博客中学到很多东西。当然,本书的最终资源来自ECMAScript规范。ECMAScript规范自第5版以来由AllenWirfs-Brock不知疲倦地编辑和更新。Mozilla开发者网络仍然是JavaScriptAPI和特性最令人印象深刻的、高品质在线资源之一。
在策划和写作这本书的过程中,我有许多顾问。在我开始写作之前,JohnResig就以作者的角度给了我很多有用的建议。BlakeKaplan和PatrickWalton帮我在早期阶段整理我的想法和规划出这本书的组织结构。在写作的过程中,我从BrianAnderson、NorbertLindenberg、SamTobin-Hochstadt、RickWaldron和PatrickWalton那里得到了很好的建议。
很高兴能够和Pearson的工作人员共事。OliviaBasegio、AudreyDoyle、TrinaMacDonald、ScottMeyers和ChrisZahn一直关注我提出的问题,对我的拖延报以耐心,并通融我的请求。我无法想象还能有一个更愉快的写作经历。我对能为Effective系列写一本书感到非常荣幸。因为很久以前我就是《EffectiveC++》的粉丝,我曾经怀疑我是否有亲自书写一本Effective系列书籍的荣幸。
我也简直不敢相信自己有这样的好运气,能够找到梦之队一样的技术编辑。我很荣幸ErikArvidsson、RebeccaMurphey、RickWaldron和RichardWorth同意编辑这本书,他们为我提供了许多宝贵的批评和建议。他们多次纠正了书中一些真正令人尴尬的错误。
写一本书比我预想的要难得多。如果不是朋友和同事的支持,我可能已经失去了勇气。在我怀疑自己的时候,AndyDenmark、RickWaldron和TravisWinfrey总是给予我鼓励。
我绝大部分时候是在旧金山柏丽附近的神话般的JavaBeach咖啡厅里写作这本书的。那里的工作人员都知道我的名字,并且我还没点餐之前,他们就知道我想要点什么。我很感谢他们提供了一个舒适的工作场所,并给我提供食物和咖啡。
我的毛茸茸的猫科小友Schmoopy为本书做出了它的最大贡献。至少,它不停地跳上我的膝盖,坐在屏幕前(有可能是笔记本电脑比较温暖)。Schmoopy自2006年以来一直是我的忠实伙伴,我不能想象我的生活能离得开这个小毛球。
我的
Effective JavaScript:编写高质量JavaScript代码的68个有效方法 下载 mobi epub pdf txt 电子书 格式
Effective JavaScript:编写高质量JavaScript代码的68个有效方法 下载 mobi pdf epub txt 电子书 格式 2024
Effective JavaScript:编写高质量JavaScript代码的68个有效方法 下载 mobi epub pdf 电子书你敢说你是新书么,塑封里面脏东西太多……封面刮花了,塑封完好无损,奇事
评分非常棒非常棒非常棒非常棒
评分经典书籍经典书籍经典书籍经典书籍
评分物美价廉,商品晚上下单第二天就到,京东,不二之选
评分要学会把书拆开来看,写教材,当然要从基础写起,最后写屋面;读书的过程就不能拘泥于此,如果屋面考10分,基础考3分,我当然先看屋面,后看基础。
评分内容不错。。。。。。。。。
评分非常好的一本书,值得推荐!
评分很薄,浓缩精华?
评分在学习的性价比问题上,要像生意人一样精明。每分每秒,都要花在有分数的地方;没有分的,坚决不看、不问、不琢磨、不围观。还要记得二八法则,80%的分数,一定是你在20%的时间里挣到的,所以要把最重要、分数最多的章节,放在第一时间搞透彻。
Effective JavaScript:编写高质量JavaScript代码的68个有效方法 mobi epub pdf txt 电子书 格式下载 2024