海量PDF免费下载!

JavaScript语言精髓与编程实践(第3版).pdf(高清PDF免费下载)

JavaScript语言精髓与编程实践(第3版)
评分:
9.6
发布时间:
2023/10/27 19:21:58

内容介绍:

JavaScript 是一门包含多种语言特性的混合范型语言,在面向对象和函数式语言特性方面表现尤为突出,且在 ES6 之后所添加的并行语言特性也极为出色。《JavaScript语言精髓与编程实践(第3版)》基于 ES6,并涵盖最新的 ES2019 规范,全面讲述 JavaScript 在五个方面的语言特性,以及将这些特性融会如一的方法。本书不但完整解析了 JavaScript 语言,还逐一剖析了相关特性在多个开源项目中的编程实践与应用,是难得的语言学习参考书。

本书作者在前端开发领域经验丰富、深耕不辍,一书三版,历经十余年。书中对 JavaScript 语言的理解与展望,尤其适合期望精通这门语言的中高级程序员和语言实践者阅读。

作者介绍:

周爱民( Aimingoo )

南潮( ruff.io )架构师、知名JavaScript专家。从1996年开始涉足商业软件开发,在软件开发、软件工程、团队建设以及部门管理方面经验丰富,曾任支付宝(中国)公司业务架构师、盛大网络平台架构师、豌豆荚架构师等职。著有《Delphi源代码分析》《大道至简》《大道至易》《程序原本》《动态函数式语言精髓》《 我的架构思想》《 JavaScript语言精髓与编程实践》等图书。

本书目录:

第 1 章 二十年来的 JavaScript 1
1.1 网页中的代码 1
1.1.1 新鲜的玩意儿 1
1.1.2 写在网页中的第一段代码 2
1.1.3 最初的价值 3
1.2 用 JavaScript 来写浏览器上的应用 5
1.2.1 我要做一个聊天室 5
1.2.2 Flash 的一席之地 . 7
1.2.3 RWC 与 RIA 之争 8
1.3 没有框架与库的语言能怎样发展呢 10
1.3.1 做一个框架 .10
1.3.2 重写框架的语言层 .13
1.3.3 富浏览器端开发(RWC)与 AJAX 14
1.4 语言的进化 .16
1.4.1 Qomo 的重生 16
1.4.2 QoBean 是对语言的重新组织 .17
1.4.3 JavaScript 作为一门语言的进化 18
1.5 大型系统开发 .20
1.5.1 框架与架构是不同的 .20
1.5.2 大型系统与分布式的环境 .21
1.5.3 划时代的 ES6 23
1.6 为 JavaScript 正名 .24
1.6.1 JavaScript 25
1.6.1.1 Core JavaScript .26
1.6.1.2 SpiderMonkey JavaScript .27
1.6.1.3 JScript .27
1.6.2 ECMAScript 28
1.7 JavaScript 的应用环境 29
1.7.1 宿主环境 .30
1.7.2 外壳程序 .31
1.7.3 运行期环境 .32
1.7.4 兼容环境下的测试 .34
第 2 章 JavaScript 的语法 . 36
2.1 语法综述 .36
2.1.1 标识符所绑定的语义 .37
2.1.2 识别语法错误与运行错误 .38
2.2 JavaScript 的语法:声明 40
2.2.1 变量的数据类型 .40
2.2.1.1 基本数据类型 41
2.2.1.2 宿主定义的其他对象类型 42
2.2.1.3 值类型与引用类型 42
2.2.1.4 讨论:ECMAScript 的类型系统 43
2.2.2 变量声明 .45
2.2.2.1 块级作用域的变量声明与一般 var 声明 .47
2.2.2.2 用赋值模板声明一批变量 48
2.2.3 使用字面量风格的值 .48
2.2.3.1 字符串字面量、转义符 49
2.2.3.2 模板字面量 51
2.2.3.3 数值字面量 52
2.2.4 其他声明 .53
2.2.4.1 常量声明 53
2.2.4.2 符号声明 54
2.2.4.3 函数声明 55
2.3 JavaScript 的语法:表达式运算 56
2.3.1 一般表达式运算 .59
2.3.1.1 逻辑运算 59
2.3.1.2 字符串运算 60
2.3.1.3 数值运算 61
2.3.2 比较运算 .61
2.3.2.1 等值检测 62
2.3.2.2 序列检测 64
2.3.3 赋值运算 .67
2.3.3.1 赋值的语义 67
2.3.3.2 复合赋值运算符 68
2.3.3.3 解构赋值 68
2.3.4 函数相关的表达式 .69
2.3.4.1 匿名函数与箭头函数 70
2.3.4.2 函数调用 70
2.3.4.3 new 运算 72
2.3.5 特殊作用的运算符 .72
2.3.5.1 类型运算符(typeof) 73
2.3.5.2 展开语法(spread syntax) 74
2.3.5.3 面向表达式的运算符 74
2.3.6 运算优先级 .76
2.4 JavaScript 的语法:语句 78
2.4.1 表达式语句 .80
2.4.1.1 一般表达式语句 80
2.4.1.2 赋值语句与隐式的变量声明 81
2.4.1.3 函数调用语句 82
2.4.2 变量声明语句 .86
2.4.3 分支语句 .87
2.4.3.1 条件分支语句(if 语句) .87
2.4.3.2 多重分支语句(switch 语句) .88
2.4.4 循环语句 .89
2.4.5 流程控制:一般子句 .91
2.4.5.1 标签声明 91
2.4.5.2 break 子句 92
2.4.5.3 continue 子句 .94
2.4.5.4 return 子句 .95
2.4.6 流程控制:异常 .96
2.5 JavaScript 的语法:模块 97
2.5.1 模块的声明与加载 .98
2.5.1.1 加载模块 98
2.5.1.2 声明模块 100
2.5.2 名字空间的特殊性 .101
2.5.2.1 名字空间的创建者 102
2.5.2.2 名字空间中的名字是属性名 102
2.5.2.3 使用上的一些特殊性 103
2.6 严格模式下的语法限制 .105
2.6.1 语法限制 .106
2.6.2 执行限制 .108
2.6.3 严格模式的范围 . 110
2.6.3.1 有限范围下的严格模式 110
2.6.3.2 非严格模式的全局环境 112
2.7 运算符的二义性 . 112
2.7.1 加号“+”的二义性 . 114
2.7.2 括号“( )”的二义性 114
2.7.3 冒号“:”与标签的二义性 116
2.7.4 大括号“{ }”的二义性 . 117
2.7.4.1 复合语句/语句块 . 117
2.7.4.2 声明对象字面量 118
2.7.4.3 函数声明 119
2.7.4.4 结构化异常 119
2.7.4.5 模板中的变量引用 120
2.7.4.6 解构赋值 120
2.7.5 逗号“,”的二义性 122
2.7.6 方括号“[ ]”的二义性 123
2.7.7 语法设计中对二义性的处理 127
第 3 章 JavaScript 的面向对象语言特性 . 130
3.1 面向对象编程的语法概要 .130
3.1.1 对象声明与实例创建 .132
3.1.1.1 使用构造器创建对象实例 132
3.1.1.2 声明对象字面量 134
3.1.1.3 数组及其字面量 137
3.1.1.4 正则表达式及其字面量 138
3.1.1.5 在对象声明中使用属性存取器 141
3.1.2 使用类继承体系 .141
3.1.2.1 声明类和继承关系 141
3.1.2.2 声明属性 143
3.1.2.3 调用父类构造方法 144
3.1.2.4 调用父类方法 145
3.1.2.5 类成员(类静态成员) 146
3.1.3 对象成员 .147
3.1.3.1 成员的列举,以及可列举性 147
3.1.3.2 对象及其成员的检查 150
3.1.3.3 值的存取 153
3.1.3.4 成员的删除 154
3.1.3.5 方法的调用 157
3.1.4 使用对象自身 .157
3.1.4.1 与基础类型数据之间的运算 157
3.1.4.2 默认对象的指定 158
3.1.5 符号 .158
3.1.5.1 列举符号属性 159
3.1.5.2 改变对象内部行为 159
3.1.5.3 全局符号表 160
3.2 JavaScript 的原型继承 161
3.2.1 空(null)与空白对象(empty) .161
3.2.1.1 空白对象是所有对象的基础 162
3.2.1.2 构造复制?写时复制?还是读遍历? .163
3.2.1.3 构造过程:从函数到构造器 166
3.2.1.4 内置属性与方法 167
3.2.1.5 原型为 null:“更加空白”的对象 .170
3.2.2 原型链的维护 .171
3.2.2.1 外部原型链与 constructor 属性 172
3.2.2.2 使用内部原型链 173
3.2.3 原型继承的实质 .175
3.2.3.1 简单模型 175
3.2.3.2 基于原型继承的设计方法 177
3.2.3.3 如何理解“继承来的成员” 177
3.3 JavaScript 的类继承 179
3.3.1 类是静态的声明 .179
3.3.2 super 是全新的语法元素 181
3.3.2.1 super 的作用 181
3.3.2.2 super 指向什么 182
3.3.2.3 super 对一般属性的意义 .184
3.3.2.4 super 在两种继承关系中的矛盾 .186
3.3.2.5 super 的动态计算过程 188
3.3.3 类是用构造器(函数)来实现的 189
3.3.4 父类的默认值与 null 值 .192
3.4 JavaScript 的对象系统 196
3.4.1 封装与多态 .196
3.4.1.1 封装 196
3.4.1.2 多态 198
3.4.1.3 多态与方法继承 200
3.4.2 属性 .201
3.4.2.1 方法 201
3.4.2.2 事件 205
3.4.3 构造对象系统的方法 .206
3.4.3.1 类抄写 206
3.4.3.2 原型继承 209
3.4.3.3 类继承 210
3.4.3.4 直接创建对象 211
3.4.3.5 如何选择继承的方式 213
3.4.4 内置的对象系统 .214
3.4.4.1 早期规范(ES5 之前)中的对象 .216
3.4.4.2 集合对象 218
3.4.4.3 结构化数据对象 221
3.4.4.4 反射对象 223
3.4.4.5 其他 225
3.4.5 特殊效果的继承 .226
3.5 可定制的对象属性 .229
3.5.1 属性描述符 .230
3.5.1.1 数据描述符 230
3.5.1.2 存取描述符 231
3.5.1.3 隐式创建的描述符:字面量风格的对象或类声明 .232
3.5.2 定制对象属性 .233
3.5.2.1 给属性赋值 234
3.5.2.2 使用属性描述符 235
3.5.2.3 取属性或属性列表 237
3.5.3 属性表的状态 .239
3.6 运行期侵入与元编程系统 .242
3.6.1 关于运行期侵入 .243
3.6.1.1 运行期侵入的核心机制 243
3.6.1.2 可被符号影响的行为 244
3.6.1.3 内部方法与反射机制 251
3.6.1.4 侵入原型 255
3.6.2 类类型与元类继承 .257
3.6.2.1 原子 257
3.6.2.2 元与元类 258
3.6.2.3 类类型系统 260
3.6.2.4 类类型的检查 261
3.6.2.5 类类型的声明以及扩展特性 263
3.6.3 元编程模型 .266
第 4 章 JavaScript 语言的结构化 269
4.1 概述 .269
4.1.1 命令式语言 .270
4.1.1.1 存储与数据结构 270
4.1.1.2 结构化编程 271
4.1.1.3 结构化的疑难 272
4.1.2 面向对象语言 .275
4.1.2.1 结构化的延伸 275
4.1.2.2 更高层次的抽象:接口 278
4.1.2.3 面向接口的编程方法 280
4.1.3 再论语言的分类 .281
4.1.3.1 对语言范型的简化 281
4.1.3.2 结构化的性质 282
4.1.4 JavaScript 的语源 283
4.2 基本的组织元素 .284
4.2.1 标识符 .285
4.2.2 表达式 .286
4.2.2.1 字面量 287
4.2.2.2 初始器 287
4.2.3 语句 .288
4.2.4 模块 .289
4.2.5 组织的原则 .290
4.2.5.1 原则一:抑制数据的可变性 290
4.2.5.2 原则二:最小逻辑和最大复用 291
4.2.5.3 原则三:语法在形式上的清晰与语义一致性 .293
4.3 声明 .294
4.3.1 声明名字 .295
4.3.2 确定性 .296
4.3.3 顶层声明 .297
4.4 语句与代码分块 .300
4.4.1 块 .301
4.4.1.1 简单语句 302
4.4.1.2 单值表达式 302
4.4.2 块与语句的语法结构 .303
4.4.2.1 语义上的代码分块 303
4.4.2.2 分支逻辑中的代码分块 303
4.4.2.3 多重分支逻辑中的代码分块 304
4.4.2.4 循环逻辑中的代码分块 306
4.4.2.5 异常中的代码分块 308
4.4.3 块与声明语句 .309
4.4.3.1 只能在块中进行数据声明 309
4.4.3.2 能同时声明块的声明语句 310
4.4.3.3 声明语句与块的组织 311
4.4.4 块与语句的值 .312
4.4.4.1 语句的执行状态 314
4.4.4.2 语句无值 315
4.4.4.3 语句有值 316
4.4.5 标签化语句与块 .317
4.5 组织形式分块的方法 .318
4.5.1 词法作用域 .319
4.5.1.1 不存在“级别 1:表达式” .320
4.5.1.2 级别 2:语句 .320
4.5.1.3 级别 3:函数 .324
4.5.1.4 级别 4:模块 .325
4.5.1.5 级别 5:全局 .327
4.5.2 执行流程及其变更 .328
4.5.2.1 级别 1:可能的逃逸 .329
4.5.2.2 级别 2:“break
· · · · · · (更多)
下载地址
重要提示!:取消关注公众号后将无法再启用回复功能,不支持解封!
第一步:微信扫码关键公众号“架构师老卢”
第二步:在公众号聊天框发送book:24641,如:book:24641 获取下载地址
第三步:恭喜你,快去下载你想要的资源吧