万本电子书0元读

万本电子书0元读

顶部广告

JavaScript高级程序设计(第5版)电子书

1. JavaScript“红宝书”经典重现 2. 全面更新至ECMAScript 2024 3. 中文版销量累计超400000册 4. Web前端发者的黄金学习指南

售       价:¥

纸质售价:¥109.80购买纸书

0人正在读 | 0人评论 6.8

作       者:[美]马特·弗里斯比(Matt Frisbie) 著

出  版  社:人民邮电出版社有限公司

出版时间:2024-12-01

字       数:92.8万

所属分类: 科技 > 计算机/网络 > 程序设计

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(条)
  • 读书简介
  • 目录
  • 累计评论(条)
本书是JavaScript经典图书的新版。第5版涵盖ECMAScript 2024,全面、深地介绍了JavaScript的基础语法和高级特性。书中详尽讨论了JavaScript的各个方面,从JavaScript的起源始,逐步讲解到最 新的技术,重介绍了ECMAScript标准和DOM规范,并在此基础上讨论了JavaScript语言的核心概念, 包括类、期约、迭代器、代理,等等。另外,书中也结合实际发深探讨了事件、动画、表单、错误处理及JSON。本书同时也介绍了近几年来涌现的重要新规范,包括Fetch、模块、工作者线程以及大量新的JavaScript API。<br/>【推荐语】<br/>1. JavaScript“红宝书”经典重现 2. 全面更新至ECMAScript 2024 3. 中文版销量累计超400000册 4. Web前端发者的黄金学习指南<br/>【作者】<br/>马特·弗里斯比(Matt Frisbie) 前端技术专家,拥有十多年Web发经验,曾担任独立软件顾问、公司联合创始人和谷歌公司工程师,目前经营自己的咨询业务。在谷歌工作期间,他参与了AdSense和AMP平台的工作。在此之前,马特是美国DoorDash公司的一位工程师,该公司已成为在线食品配送领域的领导者。马特拥有伊利诺伊大学厄巴纳-香槟分校(UIUC)计算机工程学士学位。除了本书,马特还著有其他几本前端技术图书,涉及浏览器扩展和Angular应用发等。<br/>
目录展开

版权声明

献辞

前言

读者对象

本书内容

组织结构

预备条件

致谢

第 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

看完了

累计评论(条) 个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部