展开全部

主编推荐语

JavaScript经典图书第4版。

内容简介

本书涵盖ECMAScript 2019,全面、深入地介绍了JavaScript开发者必须掌握的前端开发技术,涉及JavaScript的基础特性和高级特性。

书中详尽讨论了JavaScript的各个方面,从JavaScript的起源开始,逐步讲解到新出现的技术,其中重点介绍ECMAScript和DOM标准。在此基础上,接下来的各章揭示了JavaScript的基本概念,包括类、期约、迭代器、代理,等等。

另外,书中深入探讨了客户端检测、事件、动画、表单、错误处理及JSON。本书同时也介绍了近几年来涌现的重要新规范,包括Fetch API、模块、工作者线程、服务线程以及大量新API。

目录

  • 版权信息
  • 献词
  • 译者序
  • 前言
  • 读者对象
  • 本书内容
  • 组织结构
  • 预备条件
  • 电子书及附录
  • 致谢
  • 第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 MutationObschmerver接口
  • 14.3.1 基本用法
  • 14.3.2 MutationObschmerverInit与观察范围
  • 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
  • 作者简介
  • 看完了
展开全部

评分及书评

评分不足
2个评分
  • 用户头像
    给这本书评了
    5.0
    经典之作,名副其实

    这本书是应该很多自学前端的小伙伴的第一本 js 编程书籍,对我来说也是如此。在初期想读完这本书很难,因为读了半天可能也不会教你写出个好看的网页,很多同学也就放弃了。但是随着学习的深入,知识边界的扩充,发现自己不懂的越来越多,回过头来发现,原来我遇到的问题这里都有答案;原来我对 js 还有这么多不了解;原来网上很多大佬的文章也不过是八书的内容转述了一遍。有人说这本书像词典,需要的时候方便查阅,我觉得这本书像地图,时不时拿出来翻翻,看看自己哪方面忘了再补补。总评:不可多得的好书,可以反复阅读,每次都有新体会。

      转发
      评论

    出版方

    人民邮电出版社·图灵出品

    图灵社区成立于2005年6月,由人民邮电出版社投资控股,以策划出版高质量的科技书籍为核心业务,主要出版领域包括计算机、电子电气、数学统计、科普等,通过引进国际高水平的教材、专著,以及发掘国内优秀原创作品等途径,为目标读者提供一流的内容。