具体描述
Effective 系列丛书经典著作,亚马逊五星级畅销书,Ecma 的JavaScript 标准化委员会著名专家撰写,JavaScript 语言之父、Mozilla CTO —— Brendan Eich 作序鼎力推荐!作者凭借多年标准化委员会工作和实践经验,深刻辨析JavaScript 的内部运作机制、特性、陷阱和编程最佳实践,将它们高度浓缩为极具实践指导意义的 68 条精华建议。
本书共分为 7 章,分别涵盖 JavaScript 的不同主题。第 1 章主要讲述最基本的主题,如版本、类型转换要点、运算符注意事项和分号局限等。第 2 章主要讲解变量作用域,介绍此方面的一些基本概念,以及一些最佳实践经验。第 3 章主要讲解函数的使用,深刻解析函数、方法和类,并教会读者在不同的环境下高效使用函数。第 4 章主要讲解原型和对象,分析 JavaScript 的继承机制以及原型和对象使用的最佳实践和原则。第 5 章主要介绍数组和字典,阐述将对象作为集合的用法以及使用数组和字典的一些陷阱。第 6 章介绍库和 API,讲解如何设计良好的 API 的技巧,以清楚、简洁和明确地表达程序,并提高可重用率。第 7 章讲解并发,在技术上讨论一些“约定成俗”的 JavaScript 用法。
作者简介
David Herman,资深 JavaScript 技术专家,Ecma TC39 委员会成员,负责JavaScript 的标准化工作。他拥有格林内尔学院的计算机科学学士学位和美国东北大学的计算机科学硕士及博士学位,现在 Mozilla 研究院担任高级研究员。
目录信息
译者序
序
前言
第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
· · · · · · (收起)
读后感
这本书出版比较久了,前面几章中关于ES5以及更早版本的介绍在当下不是很适用了。比如逗号插入,现在已经有了比较完善的lint工具来解决这类问题。还有类似 eval,caller, callee 等概念,随着es的逐步规范和框架的引入,现在开发中基本不再触碰这类知识了。 但是关于Library 和...
这种标题...应该以后也是特别经典的书。 没看过,期待在国内买到。国外的太贵了... 国外的Effective C++ Effective Java都是那些语言必备的书,相信国外牛人的这本也不会我们失望
这本书出版比较久了,前面几章中关于ES5以及更早版本的介绍在当下不是很适用了。比如逗号插入,现在已经有了比较完善的lint工具来解决这类问题。还有类似 eval,caller, callee 等概念,随着es的逐步规范和框架的引入,现在开发中基本不再触碰这类知识了。 但是关于Library 和...
这种标题...应该以后也是特别经典的书。 没看过,期待在国内买到。国外的太贵了... 国外的Effective C++ Effective Java都是那些语言必备的书,相信国外牛人的这本也不会我们失望
这本书出版比较久了,前面几章中关于ES5以及更早版本的介绍在当下不是很适用了。比如逗号插入,现在已经有了比较完善的lint工具来解决这类问题。还有类似 eval,caller, callee 等概念,随着es的逐步规范和框架的引入,现在开发中基本不再触碰这类知识了。 但是关于Library 和...
用户评价
这本书真的带给了我许多惊喜!我一直觉得JavaScript的灵活性是一把双刃剑,既能带来便利,也容易导致代码的混乱和bug频发。作为一名有一定经验的开发者,我一直在寻找能够提升代码质量、减少错误发生的途径。《Effective JavaScript》恰恰满足了我的需求。作者并没有简单地给出一些“最佳实践”的清单,而是深入剖析了JavaScript语言本身的弱点,以及如何通过更聪明的设计来规避这些弱点。他对错误处理、模块化开发、以及如何编写可维护代码的讲解,都非常有见地。我尤其印象深刻的是其中关于“避免使用`eval()`”以及“理解`this`的绑定机制”的章节,这些看似基础但却常常被忽视的细节,却对代码的安全性和稳定性有着至关重要的影响。这本书让我意识到,很多时候我们之所以写出“糟糕”的代码,并不是因为我们不够聪明,而是因为我们对语言的理解不够深入。它像一位经验丰富的导师,耐心地指导我如何写出更可靠、更易于维护的JavaScript代码。
这本书简直是JavaScript开发者的一盏明灯!我最近一直在钻研JavaScript,尝试写一些更高效、更健壮的代码,但总是感觉卡在某个瓶颈。市面上相关的书籍不少,但很多都停留在语法层面,或者讲一些我早已熟知的技巧。直到我翻开《Effective JavaScript》,才真正感受到“茅塞顿开”的喜悦。它并没有直接罗列一堆“秘籍”,而是以一种非常深入浅出的方式,剖析了JavaScript语言本身的特性,以及如何在实际开发中巧妙地利用这些特性。作者在讲解每个概念时,都会给出清晰的示例代码,并且会详细解释为什么这样写比那样写更好,背后的原理是什么。这不仅仅是学习“怎么做”,更是理解“为什么这么做”,这对于构建牢固的编程思想至关重要。我尤其喜欢其中关于闭包、原型链和异步编程的章节,这些曾经让我头疼的概念,在作者的解读下变得清晰明了,甚至我现在可以自信地在项目中应用更高级的模式了。这本书绝对不是一本“速成”的读物,它需要你静下心来,认真思考,但付出的努力绝对值得。它让我看到了JavaScript更深邃的一面,也让我对未来的开发充满了信心。
我向所有希望在JavaScript领域有所建树的开发者强烈推荐《Effective JavaScript》。这本书的独特之处在于,它没有局限于某个特定的框架或库,而是聚焦于JavaScript语言本身的核心概念。作者的讲解逻辑清晰,层层递进,即使是那些初学者可能觉得晦涩难懂的知识点,在他笔下也变得生动易懂。我非常欣赏他在讨论设计模式时,并没有空谈理论,而是结合实际的应用场景,展示了如何用JavaScript优雅地实现这些模式。例如,他对迭代器和生成器的讲解,让我看到了处理复杂数据流的新方式,也让我对函数式编程在JavaScript中的应用有了更深的认识。这本书不仅仅是知识的传递,更是一种思维方式的启迪。它让我开始审视自己的编码习惯,并积极地去改进。我现在写代码时,会更加注重代码的可读性、可测试性以及未来的可扩展性,这一切都得益于这本书的指引。
老实说,我刚拿到《Effective JavaScript》的时候,并没有抱太大的期望。我以为又是一本充斥着各种“小技巧”和“快捷方式”的书,读完之后也就能写出一些“看起来很厉害”的代码,但实际效果却不尽如人意。然而,这本书彻底颠覆了我的认知。它没有那种浮夸的“让你一夜之间成为JavaScript大神”的承诺,而是从最根本、最核心的JavaScript语言机制入手,一步步引导读者去理解。作者的写作风格非常严谨,对每一个细节都力求精确,并且善于通过对比来阐述某个概念的优劣。例如,在讲解变量作用域时,他会详细分析`var`、`let`和`const`之间的区别,以及它们在不同场景下的影响,这让我对JavaScript的内存管理和性能优化有了更深刻的理解。这本书的价值在于,它教会了我如何“思考”JavaScript,而不是仅仅“使用”JavaScript。我开始能够自己发现潜在的问题,并找到更优雅的解决方案。即使是那些我自认为已经掌握的知识点,通过这本书的讲解,我也能发现之前理解的片面之处。
作为一名常年与JavaScript打交道的开发者,我坦白说,在接触《Effective JavaScript》之前,我曾一度认为自己已经对这门语言了如指掌。然而,这本书如同一面镜子,照出了我理解上的盲区。作者对JavaScript运行时行为的细致剖析,以及对一些“约定俗成”的编程方式的挑战,都让我耳目一新。他并没有盲目地追逐最新的技术潮流,而是回归JavaScript的本质,讲解那些经得起时间考验的编程哲学。我特别喜欢他关于“副作用”以及如何最小化副作用的讨论,这对于编写健壮、可预测的代码至关重要。书中对异步编程的深入讲解,特别是Promise和async/await的正确使用方式,让我对JavaScript的异步处理有了更全面的认识,也让我能够写出更简洁、更易于理解的异步代码。这本书不仅仅是技术层面的提升,更是对开发者思维模式的重塑,它让我明白,真正的“有效”编程,在于对语言的深刻理解和对设计原则的坚持。
今日(2018年)嚟睇,部分内容已经过时
差强人意
赞啊,理解透彻,讲解清楚。
赞啊,理解透彻,讲解清楚。
我叫看不懂 还得读。。。javascript工具手册集