深入理解JavaScript特性作者: [阿根廷]尼古拉斯-贝瓦夸 出版时间:2019年版内容简介 本书旨在让读者轻松学习JavaScript的新进展,包括ES6及后续更新。书中提供了大量实用示例,以循序渐进的方式讲解了异步函数、对象解构、动态导入及异步生成器等内容。本书不仅介绍了箭头函数、解构、模板字面量以及其他语法方面的新元素,还全面展示了ES6引入的流程控制机制,以及如何高效地简化自己的代码。本书的讨论还涉及ES6内置的新集合类型、使用代理控制属性访问、ES6中内置API的改进、CommonJS与ECMAScript模块的互用性等方面。目录序 xi前言 xiii第 1章 ECMAScript和JavaScript的未来 11.1 JavaScript标准简史 11.2 持续迭代的ECMAScript 31.3 浏览器支持和辅助工具 51.3.1 Babel转译器简介 51.3.2 使用ESLint提高代码质量和一致性 91.4 ES6特性 111.5 JavaScript的未来 12第 2章 ES6基础 142.1 对象字面量 142.1.1 属性值简写 142.1.2 可计算属性名 152.1.3 方法定义 172.2 箭头函数 182.2.1 词法作用域 192.2.2 箭头函数的写法 202.2.3 优点和用例 212.3 解构 222.3.1 对象的解构 222.3.2 数组的解构 252.3.3 函数参数的默认值 252.3.4 函数参数的解构 262.3.5 解构的用例 282.4 剩余参数和扩展运算符 292.4.1 剩余参数 292.4.2 扩展运算符 302.5 模板字面量 322.5.1 字符串插值 322.5.2 多行模板字面量 332.5.3 标签模板 352.6 let和const声明 372.6.1 块级作用域和let声明 382.6.2 暂时性死区 392.6.3 const声明 412.6.4 const和let的优势 42第3章 类、符号、对象和装饰器 443.1 类 443.1.1 使用类 443.1.2 类的属性和方法 473.1.3 类的继承 493.2 符号 513.2.1 本地符号 513.2.2 符号的实际用法 533.2.3 全局符号注册表 553.2.4 众所周知的符号 573.3 对象的内置改进 583.3.1 使用Object.assign扩展对象 583.3.2 使用Object.is进行对象比较 613.3.3 Object.setPrototypeOf 623.4 装饰器 633.4.1 初识JavaScript装饰器 633.4.2 装饰器叠加及不变性提醒 643.4.3 用例:C#中的特性 643.4.4 在JavaScript中装饰属性 66第4章 迭代与流程控制 684.1 Promise 684.1.1 快速理解Promise 684.1.2 Promise的延续与连缀 724.1.3 创建Promise 764.1.4 Promise的状态 784.1.5 Promise#finally提案 794.1.6 Promise.all和Promise.race 814.2 迭代器协议与可迭代协议 834.2.1 迭代的原理 834.2.2 无穷序列 854.2.3 迭代对象以生成键/值对 884.2.4 打造多功能播放列表 904.3 生成器函数与生成器对象 934.3.1 生成器基础 934.3.2 手工迭代生成器 964.3.3 将生成器混入可迭代对象 974.3.4 使用生成器遍历树 994.3.5 传递生成器函数 1014.3.6 处理异步流 1024.3.7 在生成器上抛出错误 1034.3.8 代替生成器返回 1044.3.9 基于生成器的异步I/O 1054.4 异步函数 1094.4.1 各种异步代码 1094.4.2 使用async/await 1114.4.3 并发异步流 1124.4.4 错误处理 1134.4.5 深入理解异步函数1144.5 异步迭代 1194.5.1 异步迭代器 1194.5.2 异步生成器 120第5章 巧妙使用ES中的集合 1225.1 使用ES6 map 1245.1.1 初识ES6 map 1245.1.2 散列映射和DOM元素 1285.2 理解和使用WeakMap 1305.3 ES6中的Set 1315.4 ES6 WeakSet 133第6章 使用代理控制属性访问 1366.1 了解代理 1366.1.1 捕获get访问 1376.1.2 捕获set访问 1386.1.3 通过代理实现模式验证 1406.2 可撤销代理 1426.3 代理捕获器 1436.3.1 has捕获器 1436.3.2 deleteProperty捕获器 1446.3.3 defineProperty捕获器 1466.3.4 ownKeys捕获器 1486.4 高级代理捕获器 1506.4.1 getOwnPropertyDescriptor捕获器 1506.4.2 apply捕获器 1516.4.3 construct捕获器 1546.4.4 getPrototypeOf捕获器 1566.4.5 setPrototypeOf捕获器 1576.4.6 preventExtensions捕获器 1586.4.7 isExtensible捕获器 159第7章 ES6中内置API的改进 1617.1 数字 1617.1.1 二进制和八进制字面量 1617.1.2 Number.isNaN 1627.1.3 Number.isFinite 1647.1.4 Number.parseInt 1657.1.5 Number.parseFloat 1667.1.6 Number.isInteger 1667.1.7 Number.EPSILON 1677.1.8 Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER 1677.1.9 Number.isSafeInteger 1687.2 Math 1707.2.1 Math.sign 1717.2.2 Math.trunc 1717.2.3 Math.cbrt 1717.2.4 Math.expm1 1727.2.5 Math.log1p 1727.2.6 Math.log10 1737.2.7 Math.log2 1737.2.8 三角函数1747.2.9 Math.hypot 1747.2.10 按位计算助手 1747.3 字符串和Unicode 1757.3.1 String#startsWith 1757.3.2 String#endsWith 1767.3.3 String#includes 1777.3.4 String#repeat 1777.3.5 字符串填充和去空白 1797.3.6 Unicode 1807.3.7 String.prototype[Symbol.iterator] 1817.3.8 有关分割字形段的提案 1827.3.9 String#codePointAt 1837.3.10 String.fromCodePoint 1847.3.11 Unicode-Aware字符串反转 1857.3.12 String#normalize 1857.4 正则表达式 1867.4.1 粘连修饰符/y 1867.4.2 Unicode修饰符/u 1877.4.3 具名捕获组 1887.4.4 Unicode属性转义 1907.4.5 后行断言 1917.4.6 新的/s(dotAll)修饰符 1937.4.7 String#matchAll 1937.5 Array 1967.5.1 Array.from 1967.5.2 Array.of 1987.5.3 Array#copyWithin 1997.5.4 Array#fill 2007.5.5 Array#find和Array#findIndex 2017.5.6 Array#keys 2017.5.7 Array#values 2027.5.8 Array#entries 2027.5.9 Array.prototype[Symbol.iterator] 202第8章 JavaScript模块 2048.1 CommonJS 2048.2 JavaScript模块 2098.2.1 严格模式 2098.2.2 export语句 2098.2.3 import语句 2138.2.4 动态import() 2158.3 ES模块的实践考量 216第9章 实用建议 2199.1 变量声明 2199.2 模板字面量 2239.3 简写及对象解构 2279.4 剩余参数和扩展运算符 2299.5 函数偏好 2319.6 类和代理 2359.7 异步代码流 2389.8 复杂性蠕变、抽象及约定 241 上一篇: 图灵程序设计丛书 数据结构与算法图解 [美]Jay Wengrow 2019年版 下一篇: 算法精粹:经典计算机科学问题的Python实现 [美]David Kopec 2020年版