JavaScript编程精粹 pdf
内容简介
本书详细介绍讲述了JavaScript的基础知识以及一些系现代语言工具和库,例如jQuery、Underscore.js和Jasmine。主要内容包括:JavaScript基础知识,函数、闭包和模块,数据结构和相关处理,面向对象的JavaScript,JavaScript设计模式,测试与调试,ECMAScript 6,DOM事件和操作,服务器端JavaScript。
作者简介
Ved Antani 印度知名时尚电商Myntra的副总裁助理,曾就职于Electronic Arts、NetApp和Oracle。从2005年起一直在从事JavaScript、Go和Java编程,在构建可伸缩系统和移动应用开发方面有着丰富的经验。
目录
第1 章 JavaScript 入门 1
1.1 JavaScript 极简史 2
1.2 如何阅读本书 2
1.3 Hello World 4
1.3.1 JavaScript 概览 5
1.3.2 JavaScript 类型 21
1.3.3 自动插入分号 23
1.3.4 JavaScript 代码风格指南 25
1.4 小结 33
第2 章 函数、闭包与模块 34
2.1 函数的字面形式 34
2.2 函数作为数据 36
2.3 作用域 38
2.3.1 全局作用域 38
2.3.2 局部作用域 39
2.3.3 函数作用域与块作用域 39
2.3.4 行内函数表达式 42
2.3.5 块作用域 42
2.4 函数声明与函数表达式 44
2.5 arguments 参数 45
2.6 匿名函数 48
2.6.1 对象创建过程中的匿名函数 48
2.6.2 列表创建过程中的匿名函数 49
2.6.3 作为函数参数的匿名函数 49
2.6.4 出现在条件逻辑中的匿名函数 49
2.7 闭包 50
2.8 计时器和回调函数 52
2.9 私有变量 53
2.10 循环与闭包 53
2.11 模块 54
2.12 小结 55
第3 章 数据结构及相关操作 56
3.1 正则表达式 56
3.2 严格匹配 57
3.3 匹配字符组 58
3.4 重复出现 61
3.5 首部与尾部 63
3.6 向后引用 63
3.7 贪婪限定符与惰性限定符 64
3.8 数组 65
3.9 map 71
3.10 set 72
3.11 编码风格 73
3.12 小结 74
第4 章 面向对象的JavaScript 75
4.1 理解对象 75
4.1.1 JavaScript 对象的行为 77
4.1.2 原型 78
4.2 实例属性与原型属性 79
4.3 继承 83
4.4 接收器与设置器 89
4.5 小结 91
第5 章 JavaScript 模式 92
5.1 设计模式 92
5.2 命名空间模式 94
5.3 模块模式 95
5.4 工厂模式 100
5.5 mixin 模式 101
5.6 装饰器模式 102
5.7 观察者模式 104
5.8 JavaScript 的Model-View-*模式 106
5.8.1 模型 视图 控制器 106
5.8.2 模型 106
5.8.3 视图 107
5.8.4 控制器 107
5.9 模型 视图 表现器 107
5.10 模型 视图 视图模型 108
5.11 小结 109
第6 章 测试与调试 110
6.1 单元测试 111
6.1.1 测试驱动开发 111
6.1.2 行为驱动开发 112
6.2 JavaScript 调试 117
6.2.1 语法错误 117
6.2.2 使用严格模式 117
6.2.3 运行时异常 118
6.3 小结 123
第7 章 ECMAScript 6 124
7.1 shim/polyfill 124
7.2 转换编译器 125
7.3 ES6 语法上的变化 125
7.3.1 块级作用域 125
7.3.2 默认参数 127
7.3.3 spread 与rest 127
7.3.4 解构 128
7.3.5 对象字面量 129
7.3.6 模板字面量 130
7.3.7 Map 与Set 131
7.3.8 Symbol 133
7.3.9 迭代器 134
7.3.10 for of 循环 134
7.3.11 箭头函数 134
7.4 小结 137
第8 章 DOM 操作与事件 138
8.1 DOM 138
8.1.1 访问DOM 元素 138
8.1.2 访问特定的节点 140
8.2 链式方法 145
8.3 遍历与操作 146
8.4 处理浏览器事件 147
8.5 事件传播 148
8.6 jQuery 事件处理及传播 149
8.7 事件委托 151
8.8 事件对象 152
8.9 小结 153
第9 章 服务器端JavaScript 154
9.1 浏览器的异步事件模型 154
9.2 回调函数 158
9.3 计时器 160
9.4 EventEmitter 161
9.5 模块 162
9.6 npm 165
9.7 JavaScript 性能 166
9.8 小结 169
感悟与笔记
精华
JavaScript的特性中有一部分特性带来的麻烦远远超出它们的价值。其中,一些特性是因为规范很不完善,从而可能导致可移植性的问题;一些特性会导致生成难以理解和修改的代码;一些特性促使我的代码风格过于复杂且易于出错;还有一些特性就是设计错误。有时候语言的设计者也会犯错。
大多数编程语言都有精华部分和鸡肋部分。我发现如果只使用精华部分而避免使用鸡肋的部分,我可以成为一个更好的程序员。毕竟,用糟糕的部件怎么可能构建出好东西呢?
标准委员会想要移除一门语言中的缺陷部分,这几乎是不可能的,因为这样做会损害所有依赖于那些鸡肋部分的糟糕程序。除了在已存在的一大堆缺陷上堆积更多的特性,他们通常无能为力。并且新旧特性并不总是能和谐共处,可能从而产生出更多的鸡肋部分。
但是,你有权力定义你自己的子集。你完全可以基于精华部分去编写更好的程序。JavaScript中鸡肋部分的比重超出了预料。在短到令人吃惊的时间里,它从不存在发展到全球采用。它从来没有在实验室里被试用和打磨。当它还非常粗糙时,它就被直接集成到网景的Navigator 2浏览器中。随着JavaTM的小应用程序(Java applets)的失败,JavaScript变成了默认的“网页语言”。作为一门编程语言,JavaScript的流行几乎完全不受它的质量的影响。
好在JavaScript有一些非常精华的部分。JavaScript最本质的部分被深深地隐藏着,以至于多年来对它的主流观点是:JavaScript就是一个丑陋的、没用的玩具。本书的目的就是要揭示JavaScript中的精华,让大家知道它是一门杰出的动态编程语言。
或许只学习精华部分的最大好处就是你可以不用考虑鸡肋的部分。忘掉不好的模式是非常困难的。这是一个非常痛苦的工作,我们中的大多数人都会很不愿意面对。有时候,制定语言的子集是为了让学生更好的学习。但在这里,我制定的JavaScript子集是为了主专业人员更好的工作。
为什么要使用JavaScript
JavaScript是一门重要的语言,因为它是web浏览器的语言。它与浏览器的结合使它成为世界上最流行的编程语言之一。同时,它也是世界上最被轻视的编程语言之一。浏览器的API和文档对象模型(DOM)相当糟糕,导致JavaScript遭到不公平的指责。
JavaScript是最被轻视的语言,因为它不是所谓的主流语言。如果你擅长某些主流语言,但却在一个只支持JavaScript的环境中编程,那么被迫使用JavaScript确是相当令人厌烦的。大多数人觉得没必要去先学好JavaScript,但结果他们会惊讶地发现,JavaScript跟他们宁愿使用的主流语言有很大不同,而且这些不同至为关键。
JavaScript令人惊异的事情是,在对这门语言没有太多了解,甚至对编程都没有太多了解的情况下,你也能用它来完成工作。它是一门拥有极强表达能力的语言。当你知道要做什么时,它甚至能表现得更好。编程是很困难的事情。绝不应该在对此一无所知时便开始你的工作。
分析JavaScript
JavaScript建立在一些非常好的想法和少数非常坏的想法之上。
那些非常好的想法包括函数、弱类型、动态对象和一个富有表现力的字面量表示法。那些坏的想法包括基于全局变量的编程模型。
JavaScript的函数是(主要)基于词法作用域(lexical scoping)的顶级对象。JavaScript是第一个成为主流的lambda语言。实际上,相对Java而言,JavaScript与Lisp和Scheme有更多的共同点。它是披着C外衣的Lisp。这使得JavaScript成为一个非常强大的语言。
现今大部分编程语言中都流行要求强类型。其原理在于强类型允许编译器在编译时检测错误。我们能越早检测和修复错误,付出的代价就越小。JavaScript是一门弱类型的语言,所以JavaScript编译器不能检测出类型错误。另一方面,弱类型其实是自由的。我们无须建立复杂的次,我永远不用做强制类型转换,也不用疲于应付类型系统以得到想要的行为。
JavaScript有非常强大的对象字面量表示法。通过列出对象的组成部分,它们就能简单地被创建出来。这种表示法产生了流行的数据交换格式——JSON。
原型继承是JavaScript中一个有争议的特性。JavaScript有一个无类别(class-free)的对象系统,在这个系统中,对象直接从其他对象继承属性。这真的很强大,但是对那些被训练使用类去创建对象的程序员们来说,原型继承是一个陌生的概念。如果你尝试对JavaScript直接应用基于类的设计模式,你将会遭受挫折。但是,如果你学习使用JavaScript的原型本质,那么你的努力将会有所回报。
JavaScript在关键思想的选择上饱受非议。虽然在大多数情况下,这些选择是合适的。但是有一个选择相当糟糕:JavaScript依赖于全局变量来进行连接。所有编译单元的所有顶级变量被撮合到一个被称为全局对象的公共命名空间中。这是一件糟糕的事情,因为全局变量是魔鬼,并且在JavaScript中它们是基础性的。
在少数情况下,我们不能忽略鸡肋的部分。另外还有一些不可避免的糟粕,当涉及这些部分时,我们会将它们指出来。如果你想学习那些鸡肋的部分及如何拙劣地使用它们,请参阅任何其他的JavaScript书籍。
JavaScript是一门有许多差异的语言。它包含很多错误和尖锐的边角(sharp edges),所以你可能会疑惑:“为什么我要使用JavaScript?”有两个答案。第一个是你没有选择。Web已变成一个重要的应用开发平台,而JavaScript是唯一一门所有浏览器都可以识别的语言。很不幸,Java在浏览器环境中失败了。JavaScript的蓬勃发展,恰恰说明了JavaScript确有其过人之处。
另一个答案是,尽管JavaScript有缺陷,但是它真的很优秀。它既轻量又富有表现力。并且一旦你熟练掌握了它,就会发现函数式编程是一件很有趣的事。
但是为了更好地使用这门语言,你必须知道它的局限。我将会无情地揭示它们。不要因此而气馁。这门语言的精华部分足以弥补它鸡肋的不足。
会员免费下载
链接:https://pan.baidu.com/s/1RJ-FNCMZWtMhRLIGL9NZ_w
提取码: ****** 查看
成为本站VIP会员即可无限下载。 请先点击百度网盘,看资源是否还在,不在请点击链接通知站长补资源。
资源标签点击标签可查看对应分类的资源