深入理解JavaScript
正版二手,无赠品、光盘、MP3等。批量上传数据有误差,默认发一本,套装书需联系客服核实,还请见谅!
¥
15.24
1.9折
¥
79
八五品
仅1件
作者[美]罗彻麦尔(Axel Rauschmayer) 著;王玉林、杜欢、庄婷婷、章子鹏 译
出版社人民邮电出版社
出版时间2016-01
版次1
装帧平装
货号9787115402608
上书时间2024-12-15
商品详情
- 品相描述:八五品
图书标准信息
-
作者
[美]罗彻麦尔(Axel Rauschmayer) 著;王玉林、杜欢、庄婷婷、章子鹏 译
-
出版社
人民邮电出版社
-
出版时间
2016-01
-
版次
1
-
ISBN
9787115402608
-
定价
79.00元
-
装帧
平装
-
开本
16开
-
纸张
胶版纸
-
页数
413页
-
正文语种
简体中文
- 【内容简介】
-
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章 基础JavaScript3
1.1 背景3
1.1.1 JavaScript与ECMAScript3
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和null10
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 特殊的变量arguments20
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 Math32
1.18 标准库的其他功能32
第2部分 背景
第2章 为什么选择JavaScript35
2.1 JavaScript可以自由使用吗35
2.2 JavaScript优雅吗36
2.3 JavaScript有用吗36
2.3.1 图形用户界面36
2.3.2 其他技术补充完善JavaScript36
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章 标准化:ECMAScript44
第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和null72
8.3.1 undefined和null的出现场景72
8.3.2 检测undefined和null73
8.3.3 undefined和null的历史74
8.3.4 修改undefined75
8.4 原始值的包装对象76
8.4.1 包装对象不同于原始值76
8.4.2 原始值的包装与去包装76
8.4.3 原始值从包装器借调方法77
8.5 强制类型转换78
8.5.1 强制类型转换会隐藏bug78
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 NaN106
11.3.2 Infinity108
11.3.3 两个0109
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 while147
13.3.3 do-while147
13.3.4 for147
13.3.5 for-in148
13.3.6 for each-in150
13.4 条件语句150
13.4.1 if-then-else150
13.4.2 switch151
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 throw159
14.2.2 try-catch-finally159
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变体:传参的IIFE183
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 缺陷:提取方法时丢失 this206
17.3.5 缺陷:方法中的函数会掩盖 this207
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 访问器(getter 和 setter)218
17.7.1 通过对象字面量定义访问器219
17.7.2 通过属性描述符定义访问器219
17.7.3 访问器和继承219
17.8 属性特性和属性描述符220
17.8.1 属性特性220
17.8.2 属性描述符221
17.8.3 通过描述符获取和定义属性221
17.8.4 复制对象223
17.8.5 属性:定义与赋值224
17.8.6 继承的只读属性不能被赋值225
17.8.7 枚举性:最佳实践225
17.9 保护对象226
17.9.1 防止扩展226
17.9.2 封闭227
17.9.3 冻结228
17.9.4 缺陷:保护是浅层的229
17.10 第3层:构造函数—实例工厂229
17.10.1 JavaScript 中 new 操作符的实现231
17.10.2 术语:两个原型231
17.10.3 实例的 constructor 属性232
17.10.4 instanceof 运算符234
17.10.5 实现构造函数的小技巧237
17.11 原型属性中的数据238
17.11.1 对于实例属性,避免使用带初始值的原型属性238
17.11.2 避免非多态的原型属性240
17.11.3 多态的原型属性241
17.12 保持数据私有性241
17.12.1 构造函数环境中的私有数据(Crockford私有模式)241
17.12.2 使用标记的键的属性保存私有数据245
17.12.3 使用具体化键的属性保存私有数据246
17.12.4 通过IIFE保持全局数据私有247
17.13 第4层:构造函数之间的继承248
17.13.1 继承实例属性249
17.13.2 继承原型属性249
17.13.3 确保instanceof正常工作250
17.13.4 覆写方法251
17.13.5 父调用251
17.13.6 避免硬编码父构造函数的名字252
17.13.7 示例:构造函数继承253
17.13.8 示例:内建构造函数的继承层次结构254
17.13.9 反模式:原型是父构造函数的实例254
17.14 所有对象的方法254
17.14.1 转换为原始值254
17.14.2 Object.prototype.toLocaleString()255
17.14.3 原型式继承和属性255
17.15 泛型方法:借用原型方法256
17.15.1 通过字面量访问Object.prototype和Array.prototype257
17.15.2 调用泛型方法的例子258
17.15.3 类似数组的对象和泛型方法259
17.15.4 所有泛型方法列表261
17.16 缺陷:Object作为Map使用263
17.16.1 缺陷1:继承影响读取属性263
17.16.2 缺陷2:覆写会影响调用方法265
17.16.3 缺陷3:特殊属性__proto__265
17.16.4 字典模式:没有原型的对象更适合用作映射266
17.16.5 最佳实践267
17.17 备忘录:对象的使用267
第18章 数组269
18.1 概述269
18.1.1 数组是映射,不是元组270
18.1.2 数组也可以具有属性270
18.2 创建数组270
18.2.1 数组构造函数271
18.2.2 多维数组271
18.3 数组索引272
18.3.1 操作符in与索引273
18.3.2 删除数组元素273
18.3.3 数组索引的细节273
18.4 长度275
18.4.1 手动增加数组的长度275
18.4.2 减少数组的长度276
18.4.3 最大长度277
18.5 数组中的“空缺”277
18.5.1 创建空缺278
18.5.2 稀疏数组和密集数组278
18.5.3 哪些操作会忽略空缺,而哪些不会279
18.5.4 移除数组中的空缺280
18.6 数组构造函数281
18.7 数组原型方法281
18.8 添加和删除元素(破坏性地)281
18.9 排序和颠倒元素顺序(破坏性地)283
18.9.1 比较数字284
18.9.2 比较字符串284
18.9.3 比较对象284
18.10 合并、切分和连接(非破坏性地)285
18.11 值的查找(非破坏性地)286
18.12 迭代(非破坏性地)287
18.12.1 检测方法287
18.12.2 转化方法289
18.12.3 归约函数289
18.13 缺陷:类数组对象291
18.14 最佳实践:遍历数组291
第19章 正则表达式293
19.1 正则表达式语法293
19.1.1 原子:常规293
19.1.2 原子:字符类295
19.1.3 原子:分组296
19.1.4 量词296
19.1.5 断言297
19.1.6 析取(或)298
19.2 Unicode 和正则表达式298
19.3 创建正则表达式298
19.3.1 字面量与构造函数299
19.3.2 标识299
19.3.3 正则表达式的实例属性299
19.3.4 几个创建正则表达式的例子300
19.4 RegExp.prototype.test:是否存在匹配300
19.5 String.prototype.search:匹配位置的索引301
19.6 RegExp.prototype.exec:捕获分组301
19.6.1 首次匹配(不设置标识/g)302
19.6.2 全部匹配(设置标识 /g)302
19.7 String.prototype.match:捕获分组或返回所有匹配的子字符串303
19.8 String.prototype.replace:查找和替换303
19.8.1 Replacement 为字符串的情况304
19.8.2 当Replacement为函数时305
19.9 标识 /g 的一些问题305
19.10 提示与技巧308
19.10.1 引用文本308
19.10.2 陷阱:缺少断言(例如^、$)的正则表达式可以在任意位置
匹配308
19.10.3 匹配一切或什么都不匹配308
19.10.4 手动实现逆向查找309
19.11 正则表达式备忘单310
第20章 Date313
20.1 Date构造函数313
20.2 Date构造函数方法315
20.3 Date原型方法315
20.3.1 时间单位的getter和setter方法316
20.3.2 各种各样的getter和setter方法317
20.3.3 将日期转换成字符串317
20.4 日期和时间格式319
20.4.1 日期格式(无时间)319
20.4.2 时间格式(无日期)320
20.4.3 日期时间格式321
20.5 时间值:从1970-01-01开始的毫秒数321
第21章 Math323
21.1 Math属性323
21.2 数值函数324
21.3 三角函数325
21.4 其他函数327
第22章 JSON329
22.1 背景329
22.1.1 数据格式329
22.1.2 历史330
22.1.3 语法330
22.2 JSON.stringify(value, replacer?, space?)334
22.2.1 被JSON.stringify()忽略的数据335
22.2.2 toJSON()方法336
22.3 JSON.parse(text, reviver?)337
22.4 通过节点访问函数转换数据338
22.4.1 JSON.stringify()339
22.4.2 JSON.parse()339
第23章 标准全局变量341
23.1 构造器341
23.2 Error构造器342
23.3 非构造器函数342
23.3.1 文字的编码和解码342
23.3.2 数值归类与数值转换343
23.4 通过eval()和new Function()来动态执行JavaScript代码344
23.4.1 使用eval()执行代码344
23.4.2 通过new Function()执行代码346
23.4.3 eval()与new Function()比较347
23.4.4 最佳实践347
23.4.5 结论347
23.5 Console API348
23.5.1 Console API在各引擎的标准程度如何348
23.5.2 简单的日志记录349
23.5.3 检查和计数350
23.5.4 格式化的日志350
23.5.5 性能和时间352
23.6 名称空间和特殊值353
第24章 编码和JavaScript354
24.1 Unicode历史354
24.2 Unicode中的重要概念354
24.3 码位356
24.4 Unicode编码357
24.5 JavaScript源码和Unicode359
24.5.1 内部源码转化359
24.5.2 源码外部转化359
24.6 JavaScript字符串和Unicode361
24.6.1 转义序列361
24.6.2 通过转义引用星际平面的字符361
24.6.3 字符长度计算362
24.6.4 Unicode正常化362
24.7 JavaScript正则表达式和Unicode363
24.7.1 匹配任意的码元以及任意的码位364
24.7.2 库364
24.7.3 推荐阅读的章节资源364
第25章 ECMAScript 5的新特性366
25.1 新特性366
25.2 语法的改变367
25.3 标准库的新功能367
25.3.1 元编程367
25.3.2 新方法368
25.3.3 JSON369
25.4 兼容旧浏览器的小贴士370
第4部分 技巧、工具和类库
第26章 元编程风格指南373
26.1 现有风格指南373
26.2 通用技巧374
26.2.1 代码应该具有一致性374
26.2.2 代码应该易于理解374
26.3 普遍认可的最佳实践375
26.3.1 括号风格376
26.3.2 推荐字面量而不是构造函数377
26.3.3 不要自作聪明378
26.3.4 可接受的技巧379
26.4 具有争议的规则380
26.4.1 语法380
26.4.2 变量381
26.4.3 面向对象382
26.4.4 其他383
26.5 结论384
第27章 调试的语言机制385
第28章 子类化内置构造函数386
28.1 术语386
28.2 障碍1:具有内部属性的实例386
28.2.1 障碍1的解决方法388
28.2.2 注意389
28.3 障碍2:内置的构造函数不能作为方法调用389
28.4 另一种解决方案:委托390
第29章 JSDoc:生成API文档392
29.1 JSDoc基础393
29.1.1 语法393
29.1.2 命名类型394
29.2 基础的标签395
29.3 文档记录函数和方法396
29.4 行内类型信息(“行内文档注释”)397
29.5 文档记录变量、参数和实例属性397
29.6 文档记录类398
29.6.1 通过构造函数定义类399
29.6.2 通过对象字面量定义类399
29.6.3 通过带有@constructs方法的对象字面量定义类400
29.6.4 子类400
29.7 其他有用的标签401
第30章 类库402
30.1 shim和polyfill402
30.2 四个语言类库403
30.3 ECMAScript的国际化API403
30.3.1 ECMAScript的国际化API,第1版403
30.3.2 它是怎么样的标准呢404
30.3.3 我们可以用它做什么404
30.3.4 延伸阅读404
30.4 JavaScript资源目录405
第31章 模块系统和包管理器407
31.1 模块系统407
31.2 包管理器408
31.3 简单粗暴的模块实现408
第32章 其他工具410
第33章 接下来该做什么412
点击展开
点击收起
— 没有更多了 —
以下为对购买帮助不大的评价