1.中文版累计销量320 000 册,JavaScript“红宝书”全新升级; 2.涵盖ECMAScript 2019,全面深,门和阶俱佳; 3.新版全面升级,延续了上一版的框架和格局,删减了已经过时的内容,在此基础上又翔实地增补了ES2015到ES2019的全新内容; 4.多个章节配有视频课二维码,扫码即可观看;结合视频讲解 配套编程环境,助你轻松掌握JavaScript新特性与前端实践; 5.附赠《JavaScript高级程序设计第4版》阅读路线图,划分新手与阶;
售 价:¥
纸质售价:¥64.50购买纸书
温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印
为你推荐
版权声明
献词
译者序
前言
读者对象
本书内容
组织结构
预备条件
电子书及附录
致谢
第 1 章 什么是JavaScript
1.1 简短的历史回顾
1.2 JavaScript实现
1.2.1 ECMAScript
1.2.2 DOM
1.2.3 BOM
1.3 JavaScript版本
1.4 小结
第 2 章 HTML中的JavaScript
2.1 <script>元素
2.1.1 标签占位符
2.1.2 推迟执行脚本
2.1.3 异步执行脚本
2.1.4 动态加载脚本
2.1.5 XHTML中的变化
2.1.6 废弃的语法
2.2 行内代码与外部文件
2.3 文档模式
2.4 <noscript>元素
2.5 小结
第 3 章 语言基础
3.1 语法
3.1.1 区分大小写
3.1.2 标识符
3.1.3 注释
3.1.4 严格模式
3.1.5 语句
3.2 关键字与保留字
3.3 变量
3.3.1 var关键字
3.3.2 let声明
3.3.3 const声明
3.3.4 声明风格及最佳实践
3.4 数据类型
3.4.1 typeof操作符
3.4.2 Undefined类型
3.4.3 Null类型
3.4.4 Boolean类型
3.4.5 Number类型
3.4.6 String类型
3.4.7 Symbol类型
3.4.8 Object类型
3.5 操作符
3.5.1 一元操作符
3.5.2 位操作符
3.5.3 布尔操作符
3.5.4 乘性操作符
3.5.5 指数操作符
3.5.6 加性操作符
3.5.7 关系操作符
3.5.8 相等操作符
3.5.9 条件操作符
3.5.10 赋值操作符
3.5.11 逗号操作符
3.6 语句
3.6.1 if语句
3.6.2 do-while语句
3.6.3 while语句
3.6.4 for语句
3.6.5 for-in语句
3.6.6 for-of语句
3.6.7 标签语句
3.6.8 break和continue语句
3.6.9 with语句
3.6.10 switch语句
3.7 函数
3.8 小结
第 4 章 变量、作用域与内存
4.1 原始值与引用值
4.1.1 动态属性
4.1.2 复制值
4.1.3 传递参数
4.1.4 确定类型
4.2 执行上下文与作用域
4.2.1 作用域链增强
4.2.2 变量声明
4.3 垃圾回收
4.3.1 标记清理
4.3.2 引用计数
4.3.3 性能
4.3.4 内存管理
4.4 小结
第 5 章 基本引用类型
5.1 Date
5.1.1 继承的方法
5.1.2 日期格式化方法
5.1.3 日期/时间组件方法
5.2 RegExp
5.2.1 RegExp实例属性
5.2.2 RegExp实例方法
5.2.3 RegExp构造函数属性
5.2.4 模式局限
5.3 原始值包装类型
5.3.1 Boolean
5.3.2 Number
5.3.3 String
5.4 单例内置对象
5.4.1 Global
5.4.2 Math
5.5 小结
第 6 章 集合引用类型
6.1 Object
6.2 Array
6.2.1 创建数组
6.2.2 数组空位
6.2.3 数组索引
6.2.4 检测数组
6.2.5 迭代器方法
6.2.6 复制和填充方法
6.2.7 转换方法
6.2.8 栈方法
6.2.9 队列方法
6.2.10 排序方法
6.2.11 操作方法
6.2.12 搜索和位置方法
6.2.13 迭代方法
6.2.14 归并方法
6.3 定型数组
6.3.1 历史
6.3.2 ArrayBuffer
6.3.3 DataView
6.3.4 定型数组
6.4 Map
6.4.1 基本API
6.4.2 顺序与迭代
6.4.3 选择Object还是Map
6.5 WeakMap
6.5.1 基本API
6.5.2 弱键
6.5.3 不可迭代键
6.5.4 使用弱映射
6.6 Set
6.6.1 基本API
6.6.2 顺序与迭代
6.6.3 定义正式集合操作
6.7 WeakSet
6.7.1 基本API
6.7.2 弱值
6.7.3 不可迭代值
6.7.4 使用弱集合
6.8 迭代与扩展操作
6.9 小结
第 7 章 迭代器与生成器
7.1 理解迭代
7.2 迭代器模式
7.2.1 可迭代协议
7.2.2 迭代器协议
7.2.3 自定义迭代器
7.2.4 提前终止迭代器
7.3 生成器
7.3.1 生成器基础
7.3.2 通过yield中断执行
7.3.3 生成器作为默认迭代器
7.3.4 提前终止生成器
7.4 小结
第 8 章 对象、类与面向对象编程
8.1 理解对象
8.1.1 属性的类型
8.1.2 定义多个属性
8.1.3 读取属性的特性
8.1.4 合并对象
8.1.5 对象标识及相等判定
8.1.6 增强的对象语法
8.1.7 对象解构
8.2 创建对象
8.2.1 概述
8.2.2 工厂模式
8.2.3 构造函数模式
8.2.4 原型模式
8.2.5 对象迭代
8.3 继承
8.3.1 原型链
8.3.2 盗用构造函数
8.3.3 组合继承
8.3.4 原型式继承
8.3.5 寄生式继承
8.3.6 寄生式组合继承
8.4 类
8.4.1 类定义
8.4.2 类构造函数
8.4.3 实例、原型和类成员
8.4.4 继承
8.5 小结
第 9 章 代理与反射
9.1 代理基础
9.1.1 创建空代理
9.1.2 定义捕获器
9.1.3 捕获器参数和反射API
9.1.4 捕获器不变式
9.1.5 可撤销代理
9.1.6 实用反射API
9.1.7 代理另一个代理
9.1.8 代理的问题与不足
9.2 代理捕获器与反射方法
9.2.1 get()
9.2.2 set()
9.2.3 has()
9.2.4 defineProperty()
9.2.5 getOwnPropertyDescriptor()
9.2.6 deleteProperty()
9.2.7 ownKeys()
9.2.8 getPrototypeOf()
9.2.9 setPrototypeOf()
9.2.10 isExtensible()
9.2.11 preventExtensions()
9.2.12 apply()
9.2.13 construct()
9.3 代理模式
9.3.1 跟踪属性访问
9.3.2 隐藏属性
9.3.3 属性验证
9.3.4 函数与构造函数参数验证
9.3.5 数据绑定与可观察对象
9.4 小结
第 10 章 函数
10.1 箭头函数
10.2 函数名
10.3 理解参数
箭头函数中的参数
10.4 没有重载
10.5 默认参数值
默认参数作用域与暂时性死区
10.6 参数扩展与收集
10.6.1 扩展参数
10.6.2 收集参数
10.7 函数声明与函数表达式
10.8 函数作为值
10.9 函数内部
10.9.1 arguments
10.9.2 this
10.9.3 caller
10.9.4 new.target
10.10 函数属性与方法
10.11 函数表达式
10.12 递归
10.13 尾调用优化
10.13.1 尾调用优化的条件
10.13.2 尾调用优化的代码
10.14 闭包
10.14.1 this对象
10.14.2 内存泄漏
10.15 立即调用的函数表达式
10.16 私有变量
10.16.1 静态私有变量
10.16.2 模块模式
10.16.3 模块增强模式
10.17 小结
第 11 章 期约与异步函数
11.1 异步编程
11.1.1 同步与异步
11.1.2 以往的异步编程模式
11.2 期约
11.2.1 Promises/A+规范
11.2.2 期约基础
11.2.3 期约的实例方法
11.2.4 期约连锁与期约合成
11.2.5 期约扩展
11.3 异步函数
11.3.1 异步函数
11.3.2 停止和恢复执行
11.3.3 异步函数策略
11.4 小结
第 12 章 BOM
12.1 window对象
12.1.1 Global作用域
12.1.2 窗口关系
12.1.3 窗口位置与像素比
12.1.4 窗口大小
12.1.5 视口位置
12.1.6 导航与打开新窗口
12.1.7 定时器
12.1.8 系统对话框
12.2 location对象
12.2.1 查询字符串
12.2.2 操作地址
12.3 navigator对象
12.3.1 检测插件
12.3.2 注册处理程序
12.4 screen对象
12.5 history对象
12.5.1 导航
12.5.2 历史状态管理
12.6 小结
第 13 章 客户端检测
13.1 能力检测
13.1.1 安全能力检测
13.1.2 基于能力检测进行浏览器分析
13.2 用户代理检测
13.2.1 用户代理的历史
13.2.2 浏览器分析
13.3 软件与硬件检测
13.3.1 识别浏览器与操作系统
13.3.2 浏览器元数据
13.3.3 硬件
13.4 小结
第 14 章 DOM
14.1 节点层级
14.1.1 Node类型
14.1.2 Document类型
14.1.3 Element类型
14.1.4 Text类型
14.1.5 Comment类型
14.1.6 CDATASection类型
14.1.7 DocumentType类型
14.1.8 DocumentFragment类型
14.1.9 Attr类型
14.2 DOM编程
14.2.1 动态脚本
14.2.2 动态样式
14.2.3 操作表格
14.2.4 使用NodeList
14.3 MutationObserver接口
14.3.1 基本用法
14.3.2 MutationObserverInit与观察范围
14.3.3 异步回调与记录队列
14.3.4 性能、内存与垃圾回收
14.4 小结
第 15 章 DOM扩展
15.1 Selectors API
15.1.1 querySelector()
15.1.2 querySelectorAll()
15.1.3 matches()
15.2 元素遍历
15.3 HTML5
15.3.1 CSS类扩展
15.3.2 焦点管理
15.3.3 HTMLDocument扩展
15.3.4 字符集属性
15.3.5 自定义数据属性
15.3.6 插入标记
15.3.7 scrollIntoView()
15.4 专有扩展
15.4.1 children属性
15.4.2 contains()方法
15.4.3 插入标记
15.4.4 滚动
15.5 小结
第 16 章 DOM2和DOM3
16.1 DOM的演进
16.1.1 XML命名空间
16.1.2 其他变化
16.2 样式
16.2.1 存取元素样式
16.2.2 操作样式表
16.2.3 元素尺寸
16.3 遍历
16.3.1 NodeIterator
16.3.2 TreeWalker
16.4 范围
16.4.1 DOM范围
16.4.2 简单选择
16.4.3 复杂选择
16.4.4 操作范围
16.4.5 范围插入
16.4.6 范围折叠
16.4.7 范围比较
16.4.8 复制范围
16.4.9 清理
16.5 小结
第 17 章 事件
17.1 事件流
17.1.1 事件冒泡
17.1.2 事件捕获
17.1.3 DOM事件流
17.2 事件处理程序
17.2.1 HTML事件处理程序
17.2.2 DOM0事件处理程序
17.2.3 DOM2事件处理程序
17.2.4 IE事件处理程序
17.2.5 跨浏览器事件处理程序
17.3 事件对象
17.3.1 DOM事件对象
17.3.2 IE事件对象
17.3.3 跨浏览器事件对象
17.4 事件类型
17.4.1 用户界面事件
17.4.2 焦点事件
17.4.3 鼠标和滚轮事件
17.4.4 键盘与输入事件
17.4.5 合成事件
17.4.6 变化事件
17.4.7 HTML5事件
17.4.8 设备事件
17.4.9 触摸及手势事件
17.4.10 事件参考
17.5 内存与性能
17.5.1 事件委托
17.5.2 删除事件处理程序
17.6 模拟事件
17.6.1 DOM事件模拟
17.6.2 IE事件模拟
17.7 小结
第 18 章 动画与Canvas图形
18.1 使用requestAnimationFrame
18.1.1 早期定时动画
18.1.2 时间间隔的问题
18.1.3 requestAnimationFrame
18.1.4 cancelAnimationFrame
18.1.5 通过requestAnimationFrame节流
18.2 基本的画布功能
18.3 2D绘图上下文
18.3.1 填充和描边
18.3.2 绘制矩形
18.3.3 绘制路径
18.3.4 绘制文本
18.3.5 变换
18.3.6 绘制图像
18.3.7 阴影
18.3.8 渐变
18.3.9 图案
18.3.10 图像数据
18.3.11 合成
18.4 WebGL
18.4.1 WebGL上下文
18.4.2 WebGL基础
18.4.3 WebGL1与WebGL2
18.5 小结
第 19 章 表单脚本
19.1 表单基础
19.1.1 提交表单
19.1.2 重置表单
19.1.3 表单字段
19.2 文本框编程
19.2.1 选择文本
19.2.2 输入过滤
19.2.3 自动切换
19.2.4 HTML5约束验证API
19.3 选择框编程
19.3.1 选项处理
19.3.2 添加选项
19.3.3 移除选项
19.3.4 移动和重排选项
19.4 表单序列化
19.5 富文本编辑
19.5.1 使用contenteditable
19.5.2 与富文本交互
19.5.3 富文件选择
19.5.4 通过表单提交富文本
19.6 小结
第 20 章 JavaScript API
20.1 Atomics与SharedArrayBuffer
20.1.1 SharedArrayBuffer
20.1.2 原子操作基础
20.2 跨上下文消息
20.3 Encoding API
20.3.1 文本编码
20.3.2 文本解码
20.4 File API与Blob API
20.4.1 File类型
20.4.2 FileReader类型
20.4.3 FileReaderSync类型
20.4.4 Blob与部分读取
20.4.5 对象URL与Blob
20.4.6 读取拖放文件
20.5 媒体元素
20.5.1 属性
20.5.2 事件
20.5.3 自定义媒体播放器
20.5.4 检测编解码器
20.5.5 音频类型
20.6 原生拖放
20.6.1 拖放事件
20.6.2 自定义放置目标
20.6.3 dataTransfer对象
20.6.4 dropEffect与effectAllowed
20.6.5 可拖动能力
20.6.6 其他成员
20.7 Notifications API
20.7.1 通知权限
20.7.2 显示和隐藏通知
20.7.3 通知生命周期回调
20.8 Page Visibility API
20.9 Streams API
20.9.1 理解流
20.9.2 可读流
20.9.3 可写流
20.9.4 转换流
20.9.5 通过管道连接流
20.10 计时API
20.10.1 High Resolution Time API
20.10.2 Performance Timeline API
20.11 Web组件
20.11.1 HTML模板
20.11.2 影子DOM
20.11.3 自定义元素
20.12 Web Cryptography API
20.12.1 生成随机数
20.12.2 使用SubtleCrypto对象
20.13 小结
第 21 章 错误处理与调试
21.1 浏览器错误报告
21.1.1 桌面控制台
21.1.2 移动控制台
21.2 错误处理
21.2.1 try/catch语句
21.2.2 抛出错误
21.2.3 error事件
21.2.4 错误处理策略
21.2.5 识别错误
21.2.6 区分重大与非重大错误
21.2.7 把错误记录到服务器中
21.3 调试技术
21.3.1 把消息记录到控制台
21.3.2 理解控制台运行时
21.3.3 使用JavaScript调试器
21.3.4 在页面中打印消息
21.3.5 补充控制台方法
21.3.6 抛出错误
21.4 旧版IE的常见错误
21.4.1 无效字符
21.4.2 未找到成员
21.4.3 未知运行时错误
21.4.4 语法错误
21.4.5 系统找不到指定资源
21.5 小结
第 22 章 处理XML
22.1 浏览器对XML DOM的支持
22.1.1 DOM Level 2 Core
22.1.2 DOMParser类型
22.1.3 XMLSerializer类型
22.2 浏览器对XPath的支持
22.2.1 DOM Level 3 XPath
22.2.2 单个节点结果
22.2.3 简单类型结果
22.2.4 默认类型结果
22.2.5 命名空间支持
22.3 浏览器对XSLT的支持
22.3.1 XSLTProcessor类型
22.3.2 使用参数
22.3.3 重置处理器
22.4 小结
第 23 章 JSON
23.1 语法
23.1.1 简单值
23.1.2 对象
23.1.3 数组
23.2 解析与序列化
23.2.1 JSON对象
23.2.2 序列化选项
23.2.3 解析选项
23.3 小结
第 24 章 网络请求与远程资源
24.1 XMLHttpRequest对象
24.1.1 使用XHR
24.1.2 HTTP头部
24.1.3 GET请求
24.1.4 POST请求
24.1.5 XMLHttpRequest Level 2
24.2 进度事件
24.2.1 load事件
24.2.2 progress事件
24.3 跨源资源共享
24.3.1 预检请求
24.3.2 凭据请求
24.4 替代性跨源技术
24.4.1 图片探测
24.4.2 JSONP
24.5 Fetch API
24.5.1 基本用法
24.5.2 常见Fetch请求模式
24.5.3 Headers对象
24.5.4 Request对象
24.5.5 Response对象
24.5.6 Request、Response及Body混入
24.6 Beacon API
24.7 Web Socket
24.7.1 API
24.7.2 发送和接收数据
24.7.3 其他事件
24.8 安全
24.9 小结
第 25 章 客户端存储
25.1 cookie
25.1.1 限制
25.1.2 cookie的构成
25.1.3 JavaScript中的cookie
25.1.4 子cookie
25.1.5 使用cookie的注意事项
25.2 Web Storage
25.2.1 Storage类型
25.2.2 sessionStorage对象
25.2.3 localStorage对象
25.2.4 存储事件
25.2.5 限制
25.3 IndexedDB
25.3.1 数据库
25.3.2 对象存储
25.3.3 事务
25.3.4 插入对象
25.3.5 通过游标查询
25.3.6 键范围
25.3.7 设置游标方向
25.3.8 索引
25.3.9 并发问题
25.3.10 限制
25.4 小结
第 26 章 模块
26.1 理解模块模式
26.1.1 模块标识符
26.1.2 模块依赖
26.1.3 模块加载
26.1.4 入口
26.1.5 异步依赖
26.1.6 动态依赖
26.1.7 静态分析
26.1.8 循环依赖
26.2 凑合的模块系统
26.3 使用ES6之前的模块加载器
26.3.1 CommonJS
26.3.2 异步模块定义
26.3.3 通用模块定义
26.3.4 模块加载器终将没落
26.4 使用ES6模块
26.4.1 模块标签及定义
26.4.2 模块加载
26.4.3 模块行为
26.4.4 模块导出
26.4.5 模块导入
26.4.6 模块转移导出
26.4.7 工作者模块
26.4.8 向后兼容
26.5 小结
第 27 章 工作者线程
27.1 工作者线程简介
27.1.1 工作者线程与线程
27.1.2 工作者线程的类型
27.1.3 WorkerGlobalScope
27.2 专用工作者线程
27.2.1 专用工作者线程的基本概念
27.2.2 专用工作者线程与隐式MessagePorts
27.2.3 专用工作者线程的生命周期
27.2.4 配置Worker选项
27.2.5 在JavaScript行内创建工作者线程
27.2.6 在工作者线程中动态执行脚本
27.2.7 委托任务到子工作者线程
27.2.8 处理工作者线程错误
27.2.9 与专用工作者线程通信
27.2.10 工作者线程数据传输
27.2.11 线程池
27.3 共享工作者线程
27.3.1 共享工作者线程简介
27.3.2 理解共享工作者线程的生命周期
27.3.3 连接到共享工作者线程
27.4 服务工作者线程
27.4.1 服务工作者线程基础
27.4.2 服务工作者线程缓存
27.4.3 服务工作者线程客户端
27.4.4 服务工作者线程与一致性
27.4.5 理解服务工作者线程的生命周期
27.4.6 控制反转与服务工作者线程持久化
27.4.7 通过updateViaCache管理服务文件缓存
27.4.8 强制性服务工作者线程操作
27.4.9 服务工作者线程消息
27.4.10 拦截fetch事件
27.4.11 推送通知
27.5 小结
第 28 章 最佳实践
28.1 可维护性
28.1.1 什么是可维护的代码
28.1.2 编码规范
28.1.3 松散耦合
28.1.4 编码惯例
28.2 性能
28.2.1 作用域意识
28.2.2 选择正确的方法
28.2.3 语句最少化
28.2.4 优化DOM交互
28.3 部署
28.3.1 构建流程
28.3.2 验证
28.3.3 压缩
28.4 小结
附录 A ES2018和ES2019
A.1 异步迭代
A.1.1 创建并使用异步迭代器
A.1.2 理解异步迭代器队列
A.1.3 处理异步迭代器的reject()
A.1.4 使用next()手动异步迭代
A.1.5 顶级异步循环
A.1.6 实现可观察对象
A.2 对象字面量的剩余操作符和扩展操作符
A.2.1 剩余操作符
A.2.2 扩展操作符
A.3 Promise.prototype.finally()
A.4 正则表达式相关特性
A.4.1 dotAll标志
A.4.2 向后查找断言
A.4.3 命名捕获组
A.4.4 Unicode属性转义
A.5 数组打平方法
A.5.1 Array.prototype.flatten()
A.5.2 Array.prototype.flatMap()
A.6 Object.fromEntries()
A.7 字符串修理方法
A.8 Symbol.prototype.description
A.9 可选的catch绑定
A.10 其他新增内容
附录 B 严格模式
B.1 选择使用
B.2 变量
B.3 对象
B.4 函数
B.4.1 函数参数
B.4.2 eval()
B.4.3 eval与arguments
B.5 this强制转型
B.6 类与模块
B.7 其他变化
附录 C JavaScript库和框架
C.1 框架
C.1.1 React
C.1.2 Angular
C.1.3 Vue
C.1.4 Ember
C.1.5 Meteor
C.1.6 Backbone.js
C.2 通用库
C.2.1 jQuery
C.2.2 Google Closure Library
C.2.3 Underscore.js
C.2.4 Lodash
C.2.5 Prototype
C.2.6 Dojo Toolkit
C.2.7 MooTools
C.2.8 qooxdoo
C.3 动画与特效
C.3.1 D3
C.3.2 three.js
C.3.3 moo.fx
C.3.4 Lightbox
附录 D JavaScript工具
D.1 包管理
D.1.1 npm
D.1.2 Bower
D.1.3 JSPM
D.1.4 Yarn
D.2 模块加载器
D.2.1 SystemJS
D.2.2 RequireJS
D.3 模块打包器
D.3.1 Webpack
D.3.2 JSPM
D.3.3 Browserify
D.3.4 Rollup
D.4 编译/转译工具及静态类型系统
D.4.1 Babel
D.4.2 Google Closure Compiler
D.4.3 CoffeeScript
D.4.4 TypeScript
D.4.5 Flow
D.5 高性能脚本工具
D.5.1 WebAssembly
D.5.2 asm.js
D.5.3 Emscripten与LLVM
D.6 编辑器
D.6.1 Sublime Text
D.6.2 Atom
D.6.3 Brackets
D.6.4 Visual Studio Code
D.6.5 WebStorm
D.7 构建工具、自动化系统和任务运行器
D.7.1 Grunt
D.7.2 Gulp
D.7.3 Brunch
D.7.4 npm
D.8 代码检查和格式化
D.8.1 ESLint
D.8.2 Google Closure Compiler
D.8.3 JSLint
D.8.4 JSHint
D.8.5 ClangFormat
D.9 压缩工具
D.9.1 Uglify
D.9.2 Google Closure Compiler
D.9.3 JSMin
D.9.4 Dojo ShrinkSafe
D.10 单元测试
D.10.1 Mocha
D.10.2 Jasmine
D.10.3 qUnit
D.10.4 JsUnit
D.10.5 Dojo Object Harness
D.11 文档生成器
D.11.1 ESDoc
D.11.2 documentation.js
D.11.3 Docco
D.11.4 JsDoc Toolkit
D.11.5 YUI Doc
D.11.6 AjaxDoc
作者简介
看完了
买过这本书的人还买过
读了这本书的人还在读
同类图书排行榜