描述
开 本: 16开纸 张: 胶版纸包 装: 平装是否套装: 否国际标准书号ISBN: 9787122433725
JavaScript是web编程语言,其受欢迎程度连续多年稳居前列,成为程序员受欢迎的开发语言之一。JavaScript已经跨越前端、服务端、移动端,甚至可以开发物联网应用,正以惊人的速度成为各种应用程序的通用语言,包括 Web、桌面、云和移动设备上的应用程序。 本书的目标是全面地讲解JavaScript语言,帮助读者深入了解JavaScript函数、作用域、闭包、生成器函数、对象、数组、模块化等方方面面的各种特性,熟悉DOM、事件和计时器等测试与跨浏览器开发,以及流行的JavaScript框架所使用的技术,无论是小白还是具有一定基础的开发人员,都可以通过学习本书获得精进。 内容特色: 1循序渐进:JavaScript自底向上逐层详细介绍每一个概念和细节; 2内容全面:完整介绍了JavaScript在前端、服务端等的全面技术应用; 3案例丰富:提供了大量学习实例,并同步有视频教学,边学边用; 4配套学习资源:赠送配套实例代码,更容易理解编程思想。
本书分14章对JavaScript编程语言展开介绍,从JavaScript发展历史到基本语法、面向对象编程、程序调试、DOM操作、BOM操作,最后到JavaScript高级应用,还有ES6新特性、Promise异步编程和模块化开发等技术内容,全方位系统地介绍了作为一名前端开发人员所必须要掌握的JavaScript内容。如果您有过JavaScript的开发经验,相信您读完这本书也会纠正个人技术认知上的部分误区,如果您是一位初学者,本书也同样适合您,不过需要您把学习本书看作是一个长期任务,可以根据书中的编写案例认认真真地加以练结,相信在不久后同样可以深入掌握JavaScript。
第1章 JavaScript入门 001
1.1 初识JavaScript 001
1.1.1 JavaScript的发展历史 001
1.1.2 JavaScript的特点 002
1.1.3 JavaScript的应用场景 002
1.1.4 JavaScript的开发工具 002
1.2 JavaScript的组成 003
小结 004
第2章 在网页中使用JavaScript 005
2.1 行内方式 005
2.1.1 通过“JavaScript:”调用函数 005
2.1.2 在事件属性中调用函数 005
2.2 内嵌方式 006
2.3 链接外部JavaScript文件方式 006
小结 006
第3章 JavaScript基本语法 007
3.1 变量 007
3.1.1 概述 007
3.1.2 变量的使用 007
3.1.3 变量的重新赋值 008
3.1.4 变量使用注意事项 008
3.1.5 变量命名规范 009
3.1.6 案例:两个变量的交换 009
3.2 数据类型 010
3.2.1 概述 010
3.2.2 数据类型的分类 010
3.2.3 数字类型 010
3.2.4 字符串类型 011
3.2.5 布尔类型 012
3.2.6 Null类型 012
3.2.7 Undefined类型 013
3.2.8 typeof关键字 013
3.3 数据类型转换 014
3.3.1 概述 014
3.3.2 显式类型转换 014
3.3.3 隐式类型转换 015
3.4 运算符 016
3.4.1 概述 016
3.4.2 算术运算符 016
3.4.3 关系运算符 017
3.4.4 逻辑运算符 018
3.4.5 赋值运算符 019
3.4.6 三目运算符 020
3.4.7 运算符的优先级 020
3.5 注释 021
3.5.1 概述 021
3.5.2 单行注释 021
3.5.3 多行注释 021
3.6 输入输出语句 021
3.6.1 说明 021
3.6.2 输入 021
3.6.3 输出 022
3.7 任务练习 022
小结 023
第4章 程序结构 024
4.1 顺序结构 024
4.2 选择结构 024
4.2.1 if结构 025
4.2.2 if…else…结构 026
4.2.3 if…else if…else结构 027
4.2.4 switch结构 029
4.2.5 条件嵌套 031
4.2.6 多分支选择结构和switch对比 032
4.3 循环结构 032
4.3.1 for循环 032
4.3.2 while循环 033
4.3.3 do…while循环 034
4.3.4 for和while的对比 035
4.3.5 while和do…while的对比 035
4.3.6 循环嵌套 036
4.4 跳转语句 037
4.4.1 break语句 037
4.4.2 continue语句 038
4.5 任务练习 038
小结 039
第5章 数组 040
5.1 概述 040
5.2 定义数组 041
5.2.1 构造数组 041
5.2.2 数组字面量 041
5.3 访问数组 041
5.3.1 数组下标 041
5.3.2 数组长度 042
5.4 数组遍历 043
5.4.1 for循环索引方式 043
5.4.2 for…in方式 043
5.4.3 for…of方式 044
5.5 数组的常见操作 044
5.5.1 求数组最大值 044
5.5.2 两个数组合并 045
5.5.3 数组筛选 045
5.5.4 数组翻转 046
5.5.5 对数组元素去重 047
小结 047
第6章 程序调试及常见错误 048
6.1 为什么要进行程序调试 048
6.2 常见的程序调试方式 048
6.2.1 使用alert方法调试 048
6.2.2 使用log方法调试 049
6.3 Sources断点调试 051
6.3.1 断点调试概述 051
6.3.2 常用的调试按钮 052
6.3.3 Watch监视器的使用 052
6.4 程序常见错误 053
6.4.1 错误类型 053
6.4.2 错误解决 053
6.5 任务练习 054
小结 054
第7章 函数 055
7.1 概述 055
7.2 函数使用入门 055
7.2.1 定义函数 055
7.2.2 调用函数 056
7.3 深入理解函数作用 056
7.3.1 封装重复性代码 056
7.3.2 实现某种功能 057
7.4 函数参数 058
7.4.1 参数的作用 058
7.4.2 形参 058
7.4.3 实参 059
7.5 带参数的函数调用的说明 059
7.5.1 形参和实参个数一样 059
7.5.2 实参个数多于形参个数 060
7.5.3 实参个数少于形参个数 060
7.5.4 arguments对象 060
7.5.5 length属性 061
7.5.6 arguments和length对比 061
7.6 函数的返回值 061
7.7 作用域 062
7.7.1 概述 062
7.7.2 全局作用域 062
7.7.3 局部作用域 062
7.7.4 全局变量 063
7.7.5 局部变量 063
7.7.6 作用域链 064
7.8 提升机制 065
7.8.1 函数表达式 065
7.8.2 问题引入及提升机制概述 066
7.8.3 变量提升 067
7.8.4 函数提升 067
7.9 高阶函数 068
7.9.1 概述 068
7.9.2 函数作为参数 068
7.9.3 函数作为返回值 068
7.10 立即执行函数 069
7.11 任务练习 069
小结 069
第8章 面向对象 071
8.1 概述 071
8.2 创建对象的方式 072
8.2.1 new Object方式 072
8.2.2 字面量方式 073
8.2.3 工厂函数方式 073
8.2.4 构造函数方式 074
8.3 原型prototype 076
8.3.1 构造函数创建对象问题引入 076
8.3.2 原型的使用 077
8.4 原型继承 078
8.4.1 概述 078
8.4.2 透彻理解原型继承 079
8.5 原型链 080
8.5.1 问题引入 080
8.5.2 原型对象中的__proto__ 081
8.5.3 Object原型对象的作用 081
8.5.4 Object原型对象中的__proto__ 082
8.6 this关键字理解 083
8.6.1 全局性普通函数中的this 083
8.6.2 构造函数中的this 083
8.6.3 对象方法中的this 083
8.6.4 原型对象方法中的this 084
8.7 继承 084
8.7.1 对象冒充 085
8.7.2 call/apply方式 086
8.7.3 扩展Object类 087
8.7.4 原型方式 089
8.8 常用的内置对象 090
8.8.1 Math对象 090
8.8.2 字符串对象 091
8.8.3 日期对象 092
8.8.4 数组对象 093
8.8.5 布尔对象 097
8.8.6 数字对象 097
8.9 正则表达式 098
8.9.1 说明 098
8.9.2 概述 098
8.9.3 使用正则表达式 099
8.9.4 边界符 099
8.9.5 范围 100
8.9.6 量词 100
8.9.7 括号的使用 101
8.9.8 元字符 102
8.9.9 修饰符 102
8.9.10 字符串在正则表达式中的使用 102
8.10 经典案例 103
8.10.1 统计每个字符的个数 103
8.10.2 随机点名 103
8.10.3 倒计时 104
8.10.4 获取文件扩展名 104
8.10.5 对象转换为请求参数格式字符串 105
8.10.6 扩展Array对象 105
8.10.7 扩展String对象 106
8.10.8 计算长方形面积 106
8.10.9 遍历对象 107
小结 107
第9章 DOM操作 108
9.1 概述 108
9.2 DOM节点 109
9.2.1 节点属性 109
9.2.2 文档节点 110
9.2.3 元素节点 110
9.2.4 属性节点 110
9.2.5 文本节点 110
9.3 获取元素及内容操作 110
9.3.1 根据id获取元素 111
9.3.2 根据标签名获取元素 111
9.3.3 根据name获取元素 111
9.3.4 根据类名获取元素 112
9.3.5 根据选择器获取元素 112
9.3.6 获取和设置元素内容操作 113
9.4 属性操作 114
9.4.1 事件属性 114
9.4.2 获取内置属性 114
9.4.3 设置内置属性 115
9.4.4 获取自定义属性 115
9.4.5 设置自定义属性 116
9.4.6 H5自定义属性的规范 116
9.4.7 移除属性 117
9.4.8 表单属性 118
9.5 样式操作 118
9.5.1 行内样式操作 118
9.5.2 类名样式操作 119
9.6 节点操作 120
9.6.1 获取父节点 121
9.6.2 获取子节点 121
9.6.3 获取兄弟节点 122
9.6.4 创建及添加节点 123
9.6.5 删除节点 123
9.6.6 复制节点 124
9.6.7 创建及设置属性节点 125
9.7 DOM事件 125
9.7.1 概述 125
9.7.2 注册事件 126
9.7.3 删除事件 127
9.7.4 事件流 128
9.7.5 事件对象 131
9.7.6 阻止事件冒泡 132
9.7.7 阻止事件默认行为 132
9.7.8 事件委派 134
9.7.9 窗口事件 135
9.7.10 鼠标事件 136
9.7.11 键盘事件 138
9.7.12 表单事件 139
9.8 经典案例 140
9.8.1 简易版新闻评论 140
9.8.2 简易版新闻评论升级版 140
9.8.3 全选案例 142
9.8.4 隔行变色效果 143
小结 144
第10章 BOM操作 145
10.1 概述 145
10.2 window对象 145
10.2.1 概述 145
10.2.2 警告框 146
10.2.3 确认框 146
10.2.4 提示框 147
10.2.5 打开窗口 147
10.2.6 关闭窗口 148
10.3 location对象 148
10.3.1 概述 148
10.3.2 重新加载页面 148
10.3.3 跳转其他页面 149
10.3.4 新页面替换当前页面 149
10.4 history对象 149
10.4.1 概述 149
10.4.2 常用方法 150
10.5 navigator对象 150
10.5.1 概述 150
10.5.2 检测浏览器类型 150
10.6 定时器 151
10.6.1 概述 151
10.6.2 启动延时定时器 151
10.6.3 取消延时定时器 151
10.6.4 启动间隔定时器 152
10.6.5 取消间隔定时器 152
10.7 经典案例 153
10.7.1 显示时钟 153
10.7.2 显示和隐藏切换 153
10.7.3 实现文本框内容校验 154
10.7.4 模拟发送验证码 155
小结 155
第11章 JavaScript高级篇 156
11.1 严格模式 156
11.1.1 概述 156
11.1.2 开启严格模式 156
11.1.3 整个脚本文件的严格模式 157
11.1.4 特定函数的严格模式 157
11.1.5 严格模式的使用影响 157
11.2 改变函数内this的指向 159
11.2.1 bind方式 160
11.2.2 call/apply/bind的总结 161
11.3 对象增强 161
11.3.1 Object.define Property() 162
11.3.2 Object.define Properties() 165
11.3.3 Object.keys() 166
11.3.4 Object.is() 167
11.3.5 Object.assign() 167
11.3.6 Object.create() 169
11.4 JavaScript的内存管理 170
11.4.1 概述 170
11.4.2 栈内存 170
11.4.3 堆内存 171
11.4.4 基本数据类型传参 172
11.4.5 引用数据类型传参 173
11.4.6 值传递和引用传递 174
11.4.7 垃圾回收 174
11.4.8 引用计数算法 175
11.4.9 标记清除算法 176
11.4.10 内存泄漏 176
11.5 闭包 179
11.5.1 案例思考 179
11.5.2 概述 181
11.5.3 闭包的实现原理 181
11.5.4 闭包的生命周期 183
11.5.5 闭包的应用 183
11.6 浅拷贝和深拷贝 184
11.6.1 引用赋值 185
11.6.2 浅拷贝 186
11.6.3 深拷贝 190
11.7 JSON 192
11.7.1 概述 192
11.7.2 对象结构 192
11.7.3 数组结构 193
11.7.4 区分JSON和JavaScript对象 193
11.7.5 JavaScript对象和JSON相互转换 194
11.7.6 JSON使用时的注意事项 194
11.8 常见算法 195
11.8.1 冒泡排序 195
11.8.2 选择排序 196
11.8.3 二分法查找 197
11.8.4 递归 198
11.9 防抖和节流 199
11.9.1 防抖 199
11.9.2 节流 201
11.9.3 防抖和节流的对比 204
11.10 WebStorage存储方案 204
11.10.1 概述 204
11.10.2 分类 204
11.10.3 localStorage 205
11.10.4 sessionStorage 205
11.10.5 自定义工具类封装 206
11.11 经典案例 207
11.11.1 Vue2响应式原理简单实现 207
11.11.2 递归实现深拷贝 209
小结 210
第12章 ES6新特性 211
12.1 概述 211
12.1.1 为什么要学习ES6 211
12.1.2 ECMAScript的历史 211
12.1.3 ECMAScript和JavaScript的关系 212
12.1.4 结束语 212
12.2 变量和常量 212
12.2.1 var定义变量的问题 212
12.2.2 let 213
12.2.3 const 214
12.3 字符串扩展 215
12.3.1 新增方法 215
12.3.2 模板字符串 216
12.3.3 其他方法扩展说明 217
12.4 变量的解构赋值 217
12.4.1 对象解构 217
12.4.2 数组解构 218
12.4.3 函数参数列表中的解构赋值 218
12.4.4 复杂对象的解构 219
12.5 函数扩展 219
12.5.1 剩余参数 219
12.5.2 函数参数默认值 219
12.6 箭头函数 220
12.6.1 箭头函数的写法 220
12.6.2 箭头函数的参数说明 221
12.6.3 箭头函数的函数体说明 221
12.6.4 箭头函数中的this 222
12.6.5 箭头函数的注意事项 223
12.7 简化对象写法 223
12.7.1 对象的变量属性简写 223
12.7.2 对象的函数属性简写 224
12.8 数组对象的方法扩展 224
12.8.1 find方法 224
12.8.2 findIndex方法 225
12.8.3 of方法 225
12.8.4 from方法 225
12.9 展开运算符 226
12.9.1 数组展开 226
12.9.2 对象展开 227
12.10 class类 228
12.10.1 定义类 228
12.10.2 类的构造方法 229
12.10.3 实例对象的方法 230
12.10.4 静态属性和静态方法 230
12.10.5 继承 231
12.11 Set 233
12.11.1 概述 233
12.11.2 创建Set集合 233
12.11.3 常用方法和属性 233
12.11.4 遍历方式 234
12.12 Map 235
12.12.1 概述 235
12.12.2 创建Map集合 235
12.12.3 常用方法和属性 236
12.12.4 遍历方式 237
12.12.5 使用Map计算字符个数 238
小结 238
第13章 Promise异步编程 240
13.1 概述 240
13.2 JavaScript异步编程的实现 240
13.2.1 为什么JavaScript是单线程 240
13.2.2 JavaScript如何实现异步编程 241
13.3 回调函数 242
13.3.1 说明 242
13.3.2 事件处理程序 242
13.3.3 延迟计时器 243
13.3.4 回调函数再理解 243
13.3.5 回调地狱 244
13.4 Promise 244
13.4.1 概述 245
13.4.2 Promise对象的语法 245
13.4.3 Promise对象的属性和方法 246
13.4.4 Promise的认识误区 246
13.4.5 Promise的三种状态 247
13.4.6 Promise的结果 248
13.4.7 then方法详解 249
13.4.8 catch方法详解 255
13.4.9 其他方法 257
13.5 async关键字 257
13.5.1 概述 257
13.5.2 异步函数 257
13.6 await关键字 258
13.6.1 概述 258
13.6.2 案例 258
小结 259
第14章 模块化 260
14.1 传统开发的弊端 260
14.1.1 命名冲突 260
14.1.2 文件依赖 260
14.2 生活中的模块化 261
14.3 ES6模块化概述 261
14.4 模块化开发 262
14.4.1 导出变量和常量 262
14.4.2 导出函数 262
14.4.3 导出类 263
14.4.4 导出时别名的使用 263
14.4.5 导入时别名的使用 264
14.4.6 一次性导入 265
14.4.7 default默认导出 265
14.4.8 命名导出和默认导出混合使用 266
14.5 动态引入模块 267
14.5.1 需求 267
14.5.2 import()表达式 267
14.5.3 动态引入模块的使用场景 268
小结 268
首先感谢您从众多的JavaScript书籍中选择本书,书中内容也正如其名,对于每一个章节的内容编排,技术点的介绍,案例的分析,采用循序渐进、由浅入深的方式展开叙述,帮助爱好JavaScript编程的读者能够系统性、完整性地去掌握JavaScript编程语言。
本书一共分为14章:
第1章主要介绍了JavaScript的发展历史,包括JavaScript特点、应用场景和组成。
第2章主要介绍了在网页中使用JavaScript的三种方式。
第3~5章主要介绍了JavaScript的基本语法,包括变量、常量、数据类型及转换、运算符、注释、输入输出语句,三大程序的流程控制、数组等内容。此3章是JavaScript编程的基本功,必须要牢牢掌握该部分内容,这会对今后的代码编写产生很深的影响。
第6章主要介绍了程序调试及常见的错误类型,该章内容是每个开发者所必须掌握的,是考验开发者排错能力的重要内容。
第7章主要介绍了函数的内容,重点介绍了函数的定义、使用函数、函数参数、作用域、提升机制、高阶函数、立即执行函数等内容。函数是JavaScript编程语言的“一等公民”,函数的使用,是今后常见的操作之一。
第8章主要介绍了面向对象,从什么是对象,到创建对象的方式,到原型、原型链和原型继承的学习,this关键字的使用,四种继承方式以及常用的内置对象等。通过本章的学习可以提高开发者编写代码的质量,对后面的JavaScript高级内容、框架的学习很有帮助。
第9~10章主要介绍了DOM操作和BOM操作,通过学习DOM和BOM,让开发者具备了操作文档和浏览器的能力,让网页可以动起来,和用户的交互性更好。
第11章主要介绍了JavaScript的高级篇内容,包括对象增强、内存管理、闭包、深拷贝和浅拷贝、JSON、防抖和节流以及WebStorage存储方案,这块知识可以提高开发者的内功,也是作为一个中高级前端开发者所的技能,也是开发者求职面试中被常问的高频知识。
第12~14章主要介绍了ECMAScript6(ES6)的新特性,包括模板字符串、常量和变量定义、箭头函数、剩余参数、函数参数默认值、展开运算符、Promise异步编程、模块化开发等技术内容,ES6内容的学习是学习前端框架的必修课。
本书在章节编排上,整体上分为两大部分,第1~11章主要是ECMAScript5(ES5)的内容,第12~14章主要是ECMAScript6(ES6)的内容。各章节的内容是按照由浅入深的方式进行排列,但编程技术知识点内容从来都不是线性的,会存在前一章节的内容需要后一章节的技术做支撑的情况,如果您遇到了类似这样的情况,可以先暂时了解该知识点,待后续章节学习完毕之后,再回过头来思考。
建议读者在学习编程开发的过程中,一定要勤于思考,多总结,多练习,对于案例的学习,要理清楚思路和关键点分析,逐步培养自己的编程思维,切勿眼高手低、好高骛远。
本书在编写过程中,虽然笔者付出了很大的努力,但是书中内容也可能存在疏漏和解释不清楚的情况,欢迎各位读者批评指正。
最后感谢读者的支持,也愿您从本书中有所收获,有所成长。本书配套课件与程序源代码可扫下方二维码下载。
著者
评论
还没有评论。