编辑推荐
本书针对JavaScript初学者,帮助读者掌握JavaScript开发的精髓。每一章从教授语言的一个主题开始,给出了实践以及解决实际缺陷的指南,然后深入到相关的信息。本书帮助入门的程序员理解基础知识,掌握核心实践,甚至深入了解一些实践方法的优缺点,做到知其然且知其所以然。
《JavaScript启示录》一书作者Cody Lindley鼎力推荐
喜欢,又或是不喜欢,JavaScript都在那里,日夜相随,不离不弃。JavaScript正越来越多地出现在我们的生活中,从浏览器到服务端,再到移动端。想要学习这种语言,或者深入了解一些你没有涉足的内容,本书正是你的选择,它既可以指引入门也能够带你深入JavaScript。作者是一位程序员,也曾在相同的处境中暮然回首,找到了真实的自己。
本书通过4个独立部分引领读者逐步接近JavaScript语言。首先,快速指引部分帮助你在JavaScript编程上变得富有成效。更有经验的程序员会返现有一个完整而易读的参考,深入覆盖了该语言的每个特性。
本书包括以下内容:
JavaScript快速上手:更习惯面向对象的编程?这个部分会帮你更快更好地开始学习JavaScript。
背景:了解JavaScript的历史,以及它与其他语言之间的关系。
深入JavaScript:详细学习ECMAScript 5,从语法,变量,函数,面向对象编程,再到正则表达式和JSON,以及大量的示例。
技巧、工具和类库:对现有风格指引、实践、高阶技术、模块系统、包管理、构建工具进行调研和学习。
内容简介
JavaScript是目前Web开发领域非常流行的一种编程语言,得到众多IT从业人员和编程爱好者的关注。
本书是一本全面、深入介绍JavaScript语言的学习指南。本书共分四个部分,第1部分帮助读者快速入手,掌握基本的JavaScript编程要点;第2部分介绍JavaScript的发展和技术背景;第3部分深入探索JavaScript,介绍了语法、值、运算符、布尔类型、数字、字符串、语句、异常捕获、函数、变量、对象与继承、数组、正则表达式、Date、Math、JSON、标准全局变量、编码和JavaScript、ECMAScript 5的新特性等内容;第4部分介绍技巧、工具和类库,帮助读者更好地运用JavaScript进行编程。
本书内容由浅入深,非常适合想要快速学习JavaScript编程或者深入钻研JavaScript的读者参考。
作者简介
Axel Rauschmayer专攻JavaScript和Web开发领域。他在2ality.com写博客,教Ecmanauten,编辑JavaScript Weekly周刊,组织MunichJS用户组。Axel从1985年开始编程,1995年开始开发web应用。
目录
第1部分 JavaScript快速上手
第1章 基础JavaScript 3
1.1 背景 3
1.1.1 JavaScript与ECMAScript 3
1.1.2 JavaScript的影响和本质 3
1.2 语法 4
1.2.1 语法概述 4
1.2.2 语句和表达式 5
1.2.3 分号 5
1.2.4 注释 6
1.3 变量和赋值 6
1.3.1 赋值 6
1.3.2 复合赋值运算符 6
1.3.3 标识符与变量名 6
1.4 值 7
1.4.1 原始值和对象 8
1.4.2 原始值 9
1.4.3 对象 9
1.4.4 undefined和null 10
1.4.5 使用typeof和instanceof对值分类 11
1.5 布尔值 13
1.5.1 真值与假值 13
1.5.2 二元逻辑运算符 14
1.5.3 等式运算符 14
1.6 数字 14
1.7 运算符 15
1.8 字符串 16
1.8.1 字符串运算符 16
1.8.2 字符串方法 17
1.9 语句 17
1.9.1 条件语句 17
1.9.2 循环语句 18
1.10 函数 19
1.10.1 函数声明的提升特性 19
1.10.2 特殊的变量arguments 20
1.10.3 参数太多或太少 20
1.10.4 可选参数 20
1.10.5 强制参数长度 21
1.10.6 将arguments转换为数组 21
1.11 异常捕获 21
1.12 严格模式 22
1.13 变量作用域和闭包 22
1.13.1 变量是函数作用域的 23
1.13.2 变量的提升特性 23
1.13.3 闭包 23
1.13.4 IIFE模式:引入一个新的作用域 24
1.14 对象和构造函数 25
1.14.1 单一对象 25
1.14.2 任意属性名 26
1.14.3 提取方法 26
1.14.4 方法中的函数 27
1.14.5 构造函数:对象工厂 28
1.15 数组 29
1.15.1 数组字面量 29
1.15.2 数组方法 30
1.15.3 遍历数组 30
1.16 正则表达式 31
1.16.1 test()方法:匹配吗 31
1.16.2 exec()方法:匹配以及捕获分组 31
1.16.3 replace()方法:搜索和替换 31
1.17 Math 32
1.18 标准库的其他功能 32
第2部分 背景
第2章 为什么选择JavaScript 35
2.1 JavaScript可以自由使用吗 35
2.2 JavaScript优雅吗 36
2.3 JavaScript有用吗 36
2.3.1 图形用户界面 36
2.3.2 其他技术补充完善JavaScript 36
2.4 JavaScript有什么好用的工具吗 37
2.5 JavaScript是否足够快 37
2.6 JavaScript是广泛使用的吗 38
2.7 JavaScript有前途吗 38
2.8 结论 38
第3章 JavaScript的性质 39
3.1 古怪和非官方特性 40
3.2 优雅部分 40
3.3 影响 41
第4章 JavaScript是如何创造出来的 42
第5章 标准化:ECMAScript 44
第6章 JavaScript的历史里程碑 46
第3部分 深入JavaScript
第7章 JavaScript的语法 53
7.1 语法概览 53
7.2 注释 54
7.3 表达式与语句 54
7.3.1 表达式 55
7.3.2 语句 55
7.4 控制流语句和块 57
7.5 使用分号的规则 57
7.5.1 以块结束的语句后面没有分号 58
7.5.2 空语句 58
7.5.3 自动分号插入 59
7.6 合法标识符 60
7.7 数字字面量的方法调用 62
7.8 严格模式 62
7.8.1 启用严格模式 62
7.8.2 严格模式:建议与注意事项 63
7.8.3 严格模式中,变量必须被声明 63
7.8.4 严格模式下的函数 63
7.8.5 严格模式中,设置或者删除不可改变的属性会抛出异常 65
7.8.6 严格模式中的不合格标识符不能删除 65
7.8.7 严格模式中,eval更加简洁 66
7.8.8 严格模式中禁用的特性 66
第8章 值 67
8.1 JavaScript中的类型体系 67
8.1.1 JavaScript类型 67
8.1.2 静态与动态 68
8.1.3 静态类型与动态类型 68
8.1.4 静态类型检查和动态类型检查 68
8.1.5 强制转换 69
8.2 原始值和对象 69
8.2.1 原始值 70
8.2.2 对象 70
8.3 undefined和null 72
8.3.1 undefined和null的出现场景 72
8.3.2 检测undefined和null 73
8.3.3 undefined和null的历史 74
8.3.4 修改undefined 75
8.4 原始值的包装对象 76
8.4.1 包装对象不同于原始值 76
8.4.2 原始值的包装与去包装 76
8.4.3 原始值从包装器借调方法 77
8.5 强制类型转换 78
8.5.1 强制类型转换会隐藏bug 78
8.5.2 转换成布尔值、数字、字符串和对象的函数 78
8.5.3 算法:ToPrimitive()—将值转换为原始值 80
第9章 运算符 82
9.1 运算符和对象 82
9.2 赋值运算符 82
9.3 等号运算符:=== 和 == 84
9.3.1 严格相等(===,!==) 84
9.3.2 普通(宽松)相等(==,!=) 85
9.3.3 没有针对==的有效用例 87
9.4 排序运算符 88
9.5 加号运算符(+) 89
9.6 布尔运算符和数字运算符 90
9.7 特殊运算符 90
9.7.1 条件运算符(?:) 90
9.7.2 逗号运算符 91
9.7.3 void运算符 91
9.8 通过typeof和instanceof判断值类型 93
9.8.1 typeof:判断原始值 93
9.8.2 instanceof:检测对象是否是给定构造函数的实例 95
9.9 对象运算符 96
第10章 布尔类型 97
10.1 转换成布尔值 97
10.1.1 手动转换为布尔值 97
10.1.2 真值和假值 98
10.2 逻辑运算符 99
10.2.1 二元逻辑运算符:与(&&)和或(||) 99
10.2.2 逻辑与(&&) 100
10.2.3 逻辑或(||) 100
10.2.4 逻辑非(!) 101
10.3 等号运算符、排序运算符 101
10.4 Boolean函数 102
第11章 数字 103
11.1 数字字面量 103
11.1.1 说明 103
11.1.2 在字面量上调用方法 104
11.2 转换成数字 104
11.2.1 手动转换为数字 104
11.2.2 parseFloat() 105
11.3 特殊的数字值 106
11.3.1 NaN 106
11.3.2 Infinity 108
11.3.3 两个0 109
11.4 数字的内部表示 111
11.5 处理舍入错误 112
11.6 JavaScript中的整型 114
11.6.1 整型的范围 114
11.6.2 将整型表示为浮点数字 115
11.6.3 安全的整型 116
11.7 转换成整数 117
11.7.1 通过Math.floor(),Math.ceil()和Math.round()得到整数 118
11.7.2 通过定制函数ToInteger()得到整数 119
11.7.3 通过位运算符得到32位整数 119
11.7.4 通过parseInt()得到整数 121
11.8 算术运算符 122
11.9 位运算符 125
11.9.1 背景知识 125
11.9.2 位运算非操作符 126
11.9.3 二进制位运算符 126
11.9.4 位运算移位操作符 127
11.10 Number函数 128
11.11 Number构造器属性 128
11.12 Number原型方法 129
11.12.1 Number.prototype.toFixed(fractionDigits?) 129
11.12.2 Number.prototype.toPrecision(precision?) 130
11.12.3 Number.prototype.toString(radix?) 130
11.12.4 Number.prototype.toExponential(fractionDigits?) 131
11.13 用于数字的函数 132
11.14 本章参考资料 132
第12章 字符串 133
12.1 字符串字面量 133
12.2 字符串字面量中的转义字符 134
12.3 字符访问 135
12.4 转换为字符串 135
12.5 字符串比较 137
12.6 字符串拼接 137
12.6.1 合并:加号(+)运算符 137
12.6.2 合并:拼接字符串数组 138
12.7 字符串函数 138
12.8 字符串构造器方法 138
12.9 字符串length属性 139
12.10 字符串原型方法 139
12.10.1 提取子字符串 139
12.10.2 字符串的变换 141
12.10.3 字符串的检索和比较 142
12.10.4 支持正则表达式的方法 143
第13章 语句 145
13.1 声明和变量赋值 145
13.2 循环语句和条件语句的主体 145
13.3 循环 146
13.3.1 循环的机制 146
13.3.2 while 147
13.3.3 do-while 147
13.3.4 for 147
13.3.5 for-in 148
13.3.6 for each-in 150
13.4 条件语句 150
13.4.1 if-then-else 150
13.4.2 switch 151
13.5 with语句 153
13.5.1 语法与语义 153
13.5.2 with语句已被废弃 154
13.5.3 废弃with的原因 154
13.6 debugger语句 156
第14章 异常捕获 157
14.1 什么是异常捕获 157
14.2 JavaScript中的异常捕获 158
14.2.1 throw 159
14.2.2 try-catch-finally 159
14.2.3 例子 160
14.3 Error构造器 161
14.4 栈跟踪 162
14.5 实现一个自己的异常构造器 163
第15章 函数 164
15.1 JavaScript中函数的3种形式 164
15.2 术语:“形参”和“实参” 165
15.3 定义函数 165
15.3.1 函数表达式 166
15.3.2 函数声明 167
15.3.3 Function构造器 167
15.4 函数提升 167
15.5 函数的名称 168
15.6 哪个更好,函数声明还是函数表达式 168
15.7 控制函数调用:call(),apply()和bind() 169
15.7.1 func.apply(thisValue, argArray) 169
15.7.2 func.bind(thisValue, arg1, ..., argN) 170
15.8 参数缺失或者超出时的处理 170
15.8.1 通过索引访问所有参数:神奇的arguments变量 170
15.8.2 强制性参数,限制参数数量的最小值 172
15.8.3 可选参数 173
15.8.4 模拟参数的引用传递 173
15.8.5 陷阱:非预期的可选参数 174
15.9 具名参数 175
15.9.1 具名参数可作为描述信息 175
15.9.2 可选的具名参数 176
15.9.3 在JavaScript中模拟具名参数 176
第16章 变量:作用域、环境和闭包 177
16.1 定义变量 177
16.2 背景知识:静态性和动态性 177
16.3 背景知识:变量的作用域 178
16.4 变量以函数为作用域 179
16.5 变量声明的提前 180
16.6 通过IIFE引入新的作用域 181
16.6.1 IIFE变体:前缀运算符 182
16.6.2 IIFE变体:预内置表达式上下文 183
16.6.3 IIFE变体:传参的IIFE 183
16.6.4 IIFE的应用 183
16.7 全局变量 184
16.7.1 最佳实践:避免创建全局变量 184
16.7.2 模块系统可以减少全局变量的引入 185
16.8 全局对象 185
16.8.1 跨平台兼容 186
16.8.2 window的使用场景 186
16.9 环境:变量的管理 188
16.10 闭包:使得函数可以维持其创建时所在的作用域 191
16.10.1 通过环境来控制闭包 191
16.10.2 陷阱:不经意间的环境共用 193
第17章 对象与继承 195
17.1 第1层:单一对象 195
17.1.1 属性的种类 195
17.1.2 对象字面量 196
17.1.3 点运算符(.):通过固定键值访问属性 197
17.1.4 特殊的属性键 199
17.1.5 中括号操作符([]):通过计算出的键访问属性 199
17.2 把任意值转化为对象 201
17.3 this作为函数和方法的隐式参数 202
17.3.1 在调用函数时设置 this:call(),apply()和bind() 202
17.3.2 “用于构造函数的 apply()”详细阐述了如何配合构造函数
使用apply() 203
17.3.3 用于构造函数的apply() 204
17.3.4 缺陷:提取方法时丢失 this 206
17.3.5 缺陷:方法中的函数会掩盖 this 207
17.4 第2层:对象间的原型关系 209
17.4.1 继承 209
17.4.2 覆写 210
17.4.3 通过原型在对象间共享数据 210
17.4.4 获取和设置原型 211
17.4.5 特殊属性 __proto__ 213
17.4.6 设置和删除仅影响自有属性 214
17.5 遍历和检测属性 215
17.5.1 列出自有的属性键 215
17.5.2 列出所有的属性键 216
17.5.3 检测属性是否存在 216
17.5.4 示例 217
17.6 最佳实践:遍历自有属性 218
17.7 访问
深入理解JavaScript 下载 mobi epub pdf txt 电子书 格式