1. JavaScript“红宝书”经典重现 2. 全面更新至ECMAScript 2024 3. 中文版销量累计超400000册 4. Web前端发者的黄金学习指南
售 价:¥
纸质售价:¥109.80购买纸书
6.8
温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印
为你推荐

版权声明
献辞
前言
读者对象
本书内容
组织结构
预备条件
致谢
第 1 章 什么是 JavaScript
1.1 简短的历史回顾
1.2 JavaScript 实现
1.2.1 ECMAScript
1.2.2 DOM
1.2.3 BOM
1.3 小结
第 2 章 HTML 中的 JavaScript
2.1 <script> 元素
2.1.1 标签位置
2.1.2 推迟执行脚本
2.1.3 异步执行脚本
2.1.4 动态加载脚本
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 BigInt 类型
3.4.7 String 类型
3.4.8 Symbol 类型
3.4.9 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.5.12 逗号操作符
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.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.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.2.15 迭代方法
6.2.16 归并方法
6.2.17 展开方法
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 Set
6.5.1 基本 API
6.5.2 顺序与迭代
6.6 弱引用
6.6.1 WeakRef
6.6.2 FinalizationRegistry
6.7 WeakMap
6.7.1 基本 API
6.7.2 弱键
6.7.3 不可迭代键
6.7.4 使用弱映射
6.8 WeakSet
6.8.1 基本 API
6.8.2 弱值
6.8.3 不可迭代值
6.8.4 使用弱集合
6.9 迭代与扩展操作
6.10 小结
第 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 异步迭代
7.4.1 创建和使用异步迭代器
7.4.2 理解异步迭代器队列
7.4.3 异步迭代器如何处理拒绝
7.4.4 使用 next() 手动异步迭代
7.4.5 顶级异步循环
7.4.6 实现可观测对象
7.5 小结
第 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.1.8 合并对象
8.1.9 对象标识及相等判定
8.1.10 增强的对象语法
8.1.11 对象解构
8.1.12 剩余操作符
8.1.13 扩展操作符
8.2 创建对象
8.2.1 概述
8.2.2 构造函数模式
8.2.3 原型模式
8.2.4 原型继承
8.3 类
8.3.1 类定义
8.3.2 类的构成
8.3.3 类构造函数
8.3.4 实例、原型和类成员
8.3.5 类继承
8.4 小结
第 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.10.1 使用 apply()、call() 和 bind()
10.10.2 序列化函数
10.11 递归
10.12 尾调用优化
10.12.1 尾调用优化的条件
10.12.2 尾调用优化的代码
10.13 闭包
10.13.1 this 对象
10.13.2 内存泄漏
10.14 立即调用的函数表达式
10.15 小结
第 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.2.6 避免未处理的期约
11.2.7 期约扩展
11.3 异步函数
11.3.1 异步函数基础
11.3.2 异步函数策略
11.4 小结
第 12 章 BOM
12.1 window 对象
12.1.1 Global 作用域
12.1.2 globalThis 属性
12.1.3 窗口关系
12.1.4 窗口位置与像素比
12.1.5 窗口大小
12.1.6 视口位置
12.1.7 导航与打开新窗口
12.1.8 定时器
12.1.9 系统对话框
12.2 location 对象
操作地址
12.3 navigator 对象
注册处理程序
12.4 screen 对象
12.5 history 对象
12.5.1 导航
12.5.2 历史状态管理
12.6 小结
第 13 章 DOM
13.1 节点层级
13.1.1 Node 类型
13.1.2 Document 类型
13.1.3 Element 类型
13.1.4 Text 类型
13.1.5 Comment 类型
13.1.6 CDATASection 类型
13.1.7 DocumentType 类型
13.1.8 DocumentFragment 类型
13.1.9 Attr 类型
13.2 DOM 编程
13.2.1 动态脚本
13.2.2 动态样式
13.2.3 使用 NodeList
13.3 Selectors API
13.3.1 querySelector()
13.3.2 querySelectorAll()
13.3.3 matches()
13.4 元素遍历
13.5 HTML5
13.5.1 CSS 类扩展
13.5.2 焦点管理
13.5.3 HTMLDocument 扩展
13.5.4 字符集属性
13.5.5 自定义数据属性
13.5.6 插入标记
13.5.7 scrollIntoView()
13.5.8 children 属性
13.5.9 contains() 方法
13.5.10 插入标记
13.6 小结
第 14 章 DOM 扩展
14.1 样式
14.1.1 存取元素样式
14.1.2 操作样式表
14.1.3 元素尺寸
14.2 遍历
14.2.1 NodeIterator
14.2.2 TreeWalker
14.3 范围
14.3.1 DOM 范围
14.3.2 简单选择
14.3.3 复杂选择
14.3.4 操作范围
14.3.5 范围插入
14.3.6 范围折叠
14.3.7 范围比较
14.3.8 复制范围
14.3.9 清理
14.4 Observer API
14.4.1 Observer API 的方法
14.4.2 Resize Observer
14.4.3 Intersection Observer
14.4.4 Mutation Observer
14.5 Observer 的性能
14.6 小结
第 15 章 事件
15.1 事件流
15.1.1 事件冒泡
15.1.2 DOM 事件流
15.2 事件处理程序
15.2.1 HTML 事件处理程序
15.2.2 DOM0 事件处理程序
15.2.3 DOM2 事件处理程序
15.3 事件对象
15.3.1 DOM 事件对象
15.4 事件类型
15.4.1 用户界面事件
15.4.2 焦点事件
15.4.3 鼠标和滚轮事件
15.4.4 键盘与输入事件
15.4.5 合成事件
15.4.6 变化事件
15.4.7 HTML5 事件
15.4.8 设备事件
15.4.9 触摸及手势事件
15.4.10 事件参考
15.5 内存与性能
15.5.1 事件委托
15.5.2 删除事件处理程序
15.6 模拟事件
DOM 事件模拟
15.7 小结
第 16 章 动画与 Canvas 图形
16.1 使用 requestAnimationFrame
16.1.1 早期定时动画
16.1.2 时间间隔的问题
16.1.3 requestAnimationFrame
16.1.4 cancelAnimationFrame
16.1.5 通过 requestAnimationFrame 节流
16.2 基本的画布功能
16.3 2D 绘图上下文
16.3.1 填充和描边
16.3.2 绘制矩形
16.3.3 绘制路径
16.3.4 绘制文本
16.3.5 变换
16.3.6 绘制图像
16.3.7 阴影
16.3.8 渐变
16.3.9 图案
16.3.10 图像数据
16.3.11 合成
16.4 WebGL
16.4.1 WebGL 上下文
16.4.2 WebGL 基础
16.4.3 WebGL1 与 WebGL2
16.5 小结
第 17 章 表单脚本
17.1 表单基础
17.1.1 提交表单
17.1.2 重置表单
17.1.3 表单字段
17.2 文本框编程
17.2.1 选择文本
17.2.2 输入过滤
17.2.3 HTML5 约束验证 API
17.3 选择框编程
17.3.1 选项处理
17.3.2 添加选项
17.3.3 移除选项
17.3.4 移动和重排选项
17.4 富文本编辑
17.4.1 使用 contenteditable
17.4.2 与富文本交互
17.4.3 富文件选择
17.4.4 通过表单提交富文本
17.5 小结
第 18 章 JavaScript API
18.1 Atomics 与 SharedArrayBuffer
18.1.1 SharedArrayBuffer
18.1.2 原子操作基础
18.2 Clipboard API
18.2.1 权限
18.2.2 读写文本
18.2.3 剪贴板事件
18.2.4 处理非文本数据
18.3 跨上下文消息
18.4 Encoding API
18.4.1 文本编码
18.4.2 文本解码
18.5 File API 与 Blob API
18.5.1 File 类型
18.5.2 FileReader 类型
18.5.3 FileReaderSync 类型
18.5.4 Blob 与部分读取
18.5.5 对象 URL 与 Blob
18.5.6 读取拖放文件
18.6 Fullscreen API
18.7 Geolocation API
18.8 Device API
18.8.1 浏览器与操作系统信息
18.8.2 Connection State 和 NetworkInformation API
18.8.3 Battery Status API
18.8.4 硬件
18.9 媒体元素
18.9.1 属性
18.9.2 事件
18.9.3 自定义媒体播放器
18.9.4 检测编解码器
18.9.5 音频类型
18.10 Notifications API
18.10.1 通知权限
18.10.2 显示和隐藏通知
18.10.3 通知生命周期回调
18.11 Page Visibility API
18.12 Streams API
18.12.1 理解流
18.12.2 可读流
18.12.3 可写流
18.12.4 转换流
18.12.5 通过管道连接流
18.13 URL API
18.13.1 URL 对象
18.13.2 URLSearchParams 对象
18.14 计时 API
18.14.1 High Resolution Time API
18.14.2 Performance Timeline API
18.15 Web 组件
18.15.1 HTML 模板
18.15.2 影子 DOM
18.15.3 自定义元素
18.16 Web Cryptography API
18.16.1 生成随机数
18.16.2 使用 SubtleCrypto 对象
18.17 小结
第 19 章 错误处理与调试
19.1 浏览器错误报告
19.1.1 桌面控制台
19.1.2 移动控制台
19.2 错误处理
19.2.1 try/catch 语句
19.2.2 抛出错误
19.2.3 error 事件
19.3 错误处理策略
19.3.1 识别错误
19.3.2 常见的错误来源
19.3.3 区分重大与非重大错误
19.4 调试技术
19.4.1 把消息记录到控制台
19.4.2 理解控制台运行时
19.4.3 使用 JavaScript 调试器
19.4.4 在页面中打印消息
19.4.5 补充控制台方法
19.4.6 抛出错误
19.5 小结
第 20 章 JSON
20.1 语法
20.1.1 简单值
20.1.2 对象
20.1.3 数组
20.2 解析与序列化
20.2.1 JSON 对象
20.2.2 序列化选项
20.2.3 解析选项
20.3 小结
第 21 章 网络请求与远程资源
21.1 Fetch API
21.1.1 基本用法
21.1.2 常见 Fetch 请求模式
21.1.3 Headers 对象
21.1.4 Request 对象
21.1.5 Response 对象
21.1.6 Request、Response 及 Body 混入
21.2 跨源资源共享
21.2.1 预检请求
21.2.2 凭据请求
21.3 Beacon API
21.4 Web Socket
21.4.1 API
21.4.2 发送和接收数据
21.4.3 其他事件
21.5 EventSource API
21.6 小结
第 22 章 客户端存储
22.1 cookie
22.1.1 限制
22.1.2 cookie 的构成
22.1.3 JavaScript 中的 cookie
22.1.4 使用 cookie 的注意事项
22.2 Web Storage
22.2.1 Storage 类型
22.2.2 sessionStorage 对象
22.2.3 localStorage 对象
22.2.4 存储事件
22.2.5 限制
22.3 IndexedDB
22.3.1 数据库
22.3.2 对象存储
22.3.3 事务
22.3.4 插入对象
22.3.5 通过游标查询
22.3.6 键范围
22.3.7 设置游标方向
22.3.8 索引
22.3.9 并发问题
22.3.10 限制
22.3.11 包装库
22.4 小结
第 23 章 模块
23.1 理解模块模式
23.1.1 模块标识符
23.1.2 模块依赖
23.1.3 模块加载
23.1.4 入口
23.1.5 异步依赖
23.1.6 动态依赖
23.1.7 静态分析
23.1.8 循环依赖
23.2 使用 ES6 之前的模块加载器
23.2.1 CommonJS
23.2.2 异步模块定义
23.2.3 通用模块定义
23.2.4 模块加载器终将没落
23.3 使用 ECMAScript 模块
23.3.1 模块标签及定义
23.3.2 模块加载
23.3.3 模块行为
23.3.4 模块导出
23.3.5 模块导入
23.3.6 导入元数据
23.3.7 动态导入
23.3.8 模块副作用
23.3.9 模块转移导出
23.3.10 导入映射
23.3.11 工作者模块
23.3.12 向后兼容
23.4 小结
第 24 章 工作者线程
24.1 工作者线程简介
24.1.1 工作者线程与线程
24.1.2 工作者线程的类型
24.1.3 WorkerGlobalScope
24.2 专用工作者线程
24.2.1 专用工作者线程的基本概念
24.2.2 专用工作者线程与隐式 MessagePorts
24.2.3 专用工作者线程的生命周期
24.2.4 配置 Worker 选项
24.2.5 在 JavaScript 行内创建工作者线程
24.2.6 在工作者线程中动态执行脚本
24.2.7 委托任务到子工作者线程
24.2.8 处理工作者线程错误
24.2.9 与专用工作者线程通信
24.2.10 工作者线程数据传输
24.2.11 线程池
24.3 共享工作者线程
24.3.1 共享工作者线程简介
24.3.2 理解共享工作者线程的生命周期
24.3.3 连接到共享工作者线程
24.4 服务工作者线程
24.4.1 服务工作者线程的使用场景
24.4.2 服务工作者线程基础
24.4.3 服务工作者线程缓存
24.4.4 服务工作者线程客户端
24.4.5 服务工作者线程与一致性
24.4.6 理解服务工作者线程的生命周期
24.4.7 控制反转与服务工作者线程持久化
24.4.8 通过 updateViaCache 管理服务文件缓存
24.4.9 强制性服务工作者线程操作
24.4.10 服务工作者线程消息
24.4.11 拦截 fetch 事件
24.4.12 推送通知
24.5 小结
第 25 章 最佳实践
25.1 可维护性
25.1.1 什么是可维护的代码
25.1.2 编码规范
25.1.3 松散耦合
25.1.4 编码惯例
25.2 性能
25.2.1 不要过度优化
25.2.2 作用域意识
25.2.3 有问题的语言特性
25.2.4 选择正确的方法
25.2.5 语句最少化
25.2.6 优化 DOM 交互
25.3 强类型
25.4 部署
25.4.1 构建流程
25.4.2 验证
25.4.3 压缩
25.5 小结
附录 A ES.Next
A.1 分组同步可迭代对象
A.2 Promise.withResolvers()
A.3 正则表达式的新标志:/v
A.4 ArrayBuffer 和 SharedArrayBuffer 的新特性
A.5 保证字符串格式良好
A.6 Atomics.waitAsync()
A.7 从后向前查找的数组方法
A.8 Hashbang/Shebang 语法
A.9 符号作为 WeakMap 键
A.10 先复制再修改数组
附录 B 严格模式
B.1 选择使用
B.2 类和模块
B.3 变量
B.4 对象
B.5 函数
B.5.1 函数参数
B.5.2 eval()
B.5.3 eval 与 arguments
B.6 this 强制转型
B.7 其他变化
附录 C JavaScript 库和框架
C.1 框架
C.1.1 React
C.1.2 Angular
C.1.3 Vue
C.1.4 Alpine.js
C.1.5 Ember
C.1.6 Meteor
C.1.7 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 D3
C.2.6 three.js
C.2.7 Anime.js
C.2.8 Chart.js
C.2.9 Leaflet
C.2.10 Axios
C.2.11 Rxjs
附录 D JavaScript 工具
D.1 包管理
D.1.1 npm
D.1.2 Yarn
D.1.3 Bower
D.2 模块加载器
D.2.1 SystemJS
D.2.2 RequireJS
D.3 模块打包器
D.3.1 Webpack
D.3.2 Parcel
D.3.3 Rollup
D.4 编译/转译工具及静态类型系统
D.4.1 Babel
D.4.2 Google Closure Compiler
D.4.3 TypeScript
D.4.4 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 npm
D.7.2 Grunt
D.7.3 Gulp
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.10 单元测试
D.10.1 Mocha
D.10.2 Jest
D.10.3 Jasmine
D.10.4 qUnit
D.10.5 JsUnit
D.11 文档生成器
D.11.1 ESDoc
D.11.2 documentation.js
D.11.3 Docco
D.11.4 JsDoc Toolkit
看完了
买过这本书的人还买过
读了这本书的人还在读
同类图书排行榜