搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
Effective JavaScript:编写高质量JavaScript代码的68个有效方法:68 specific ways to harness the power JavaScript
0.00    
图书来源: 浙江图书馆(由图书馆配书)
  • 配送范围:
    全国(除港澳台地区)
  • ISBN:
    9787111446231
  • 作      者:
    (美)David Herman著
  • 出 版 社 :
    机械工业出版社
  • 出版日期:
    2014
收藏
编辑推荐
  

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


  

海报:

 
  

 
展开
作者简介

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

展开
内容介绍

  《Effective JavaScript:编写高质量JavaScript代码的68个有效方法》共分为7章,分别涵盖JavaScript的不同主题。第1章主要讲述最基本的主题,如版本、类型转换要点、运算符注意事项和分号局限等。第2章主要讲解变量作用域,介绍此方面的一些基本概念,以及一些实践经验。第3章主要讲解函数的使用,深刻解析函数、方法和类,并教会读者在不同的环境下高效使用函数。第4章主要讲解原型和对象,分析JavaScript的继承机制以及原型和对象使用的实践和原则。第5章主要介绍数组和字典,阐述将对象作为集合的用法以及使用数组和字典的一些陷阱。第6章介绍库和API,讲解如何设计良好的API的技巧,以清楚、简洁和明确地表达程序,并提高可重用率。第7章讲解并发,在技术上讨论一些“约定成俗”的JavaScript用法。

展开
精彩书评

  “这是一本绝不辜负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
  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环境中就很容易出错。
  ……

展开
目录

本书赞誉
译者序

前言
第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模式清洁异步逻辑

展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证