产品特色
编辑推荐
√2015年6月新发布的标准,被全球IT企业及前端开发者广泛拥护、支持。
√由知名博主、前端新知布道者阮一峰老师执笔。
√本书紧跟业界实践,透彻解读新增特性、语法,代码示例简洁易用。
√把握趋势,覆盖ES7,指导JavaScript开发者提升功力,了解语言发展动向。
内容简介
ES6(又名 ES2105)是 JavaScript 语言的新标准,2015 年 6 月正式发布后,得到了迅速推广,是目前业界超级活跃的计算机语言。《ES6标准入门(第2版)》是国内仅有的一本 ES6 教程,在前版基础上增补了大量内容——对标准进行了彻底的解读,所有新增的语法知识(包括即将发布的 ES7)都给予了详细介绍,并且紧扣业界开发实践,给出了大量简洁易懂、可以即学即用的示例代码。
《ES6标准入门(第2版)》为中级难度,适合对 JavaScript 语言或 ES5 已经有所了解的读者,用来提高水平,了解这门语言的新发展;也可当作参考手册,查寻 ES6/ES7 新增的语法点。
作者简介
阮一峰,著名技术博客作者,JavaScript专家。专注于网站开发技术,超过十年。畅销书《黑客与画家》《软件随想录》的译者。
目录
第1章 ECMAScript 6 简介 0011.1 ECMAScript 和 JavaScript 的关系0011.2 ECMAScript 的历史 0011.3 部署进度 0021.4 Babel 转码器 003命令行环境 004浏览器环境 005Node.js 环境 005在线转换 0061.5 Traceur 转码器 006直接插入网页 006在线转换 007命令行转换 008Node.js 环境的用法 0081.6 ECMAScript 7 009第2章 let 和 const 命令 0102.1 let 命令 010基本用法 010不存在变量提升 011暂时性死区 011不允许重复声明 0122.2 块级作用域 013为什么需要块级作用域 013ES6 的块级作用域 0132.3 const 命令 0152.4 跨模块常量 0162.5 全局对象的属性 017第3章 变量的解构赋值 0183.1 数组的解构赋值 018基本用法 018默认值 0203.2 对象的解构赋值 0213.3 字符串的解构赋值 0243.4 数值和布尔值的解构赋值 0243.5 函数参数的解构赋值 0243.6 圆括号问题 025不能使用圆括号的情况 025可以使用圆括号的情况 0263.7 用途 026第4章 字符串的扩展 0294.1 字符的 Unicode 表示法 0294.2 codePointAt() 0304.3 String.fromCodePoint() 0314.4 字符串的遍历器接口 0314.5 at() 0324.6 normalize() 0324.7 includes(),startsWith(),endsWith() 0334.8 repeat() 033目录XII目录4.9 padStart(),padEnd() 0344.10 模板字符串 0344.11 实例:模板编译 0374.12 标签模板 0384.13 String.raw() 042第5章 正则的扩展 0435.1 RegExp 构造函数 0435.2 字符串的正则方法 0435.3 u 修饰符 0435.4 y 修饰符 0455.5 sticky 属性 0475.6 flags 属性 0485.7 RegExp.escape() 048第6章 数值的扩展 0496.1 二进制和八进制数值表示法 0496.2 Number.isFinite(), Number.isNaN() 0496.3 Number.parseInt(), Number.parseFloat() 0516.4 Number.isInteger() 0516.5 Number.EPSILON 0516.6 安全整数和 Number.isSafeInteger()0526.7 Math 对象的扩展 054Math.trunc() 054Math.sign() 054Math.cbrt() 055Math.clz32() 055Math.imul() 056Math.fround() 056Math.hypot() 057对数方法 057三角函数方法 0586.8 指数运算符 058第7章 数组的扩展 0597.1 Array.from() 0597.2 Array.of() 0617.3 数组实例的 copyWithin() 0627.4 数组实例的 find() 和 findIndex()0637.5 数组实例的 fill() 0637.6 数组实例的 entries()、keys() 和values() 0647.7 数组实例的 includes() 0647.8 数组的空位 0657.9 数组推导 067第8章 函数的扩展 0698.1 函数参数的默认值 069基本用法 069与解构赋值默认值结合使用 070参数默认值的位置 071函数的 length 属性 072作用域 073应用 0748.2 rest 参数 0748.3 扩展运算符 075含义 075替代数组的 apply 方法 076扩展运算符的应用 0778.4 name 属性 0798.5 箭头函数 080基本用法 080使用注意点 081嵌套的箭头函数 0838.6 函数绑定 0848.7 尾调用优化 085什么是尾调用 085尾调用优化 086XIII目录尾递归 087递归函数的改写 0888.8 函数参数的尾逗号 089第9章 对象的扩展 0909.1 属性的简洁表示法 0909.2 属性名表达式 0929.3 方法的 name 属性 0939.4 Object.is() 0949.5 Object.assign() 0959.6 属性的可枚举性 0979.7 属性的遍历 0989.8 __proto__ 属性, Object.setPrototypeOf(),Object.getPrototypeOf() 0999.9 对象的扩展运算符 101第 10 章 Symbol 10310.1 概述 10310.2 作为属性名的 Symbol 10510.3 实例:消除魔术字符串 10610.4 属性名的遍历 10710.5 Symbol.for(),Symbol.keyFor() 10910.6 内置的 Symbol 值 110Symbol.hasInstance 110Symbol.isConcatSpreadable 110Symbol.species 111Symbol.match 111Symbol.replace 112Symbol.search 112Symbol.split 112Symbol.iterator 112Symbol.toPrimitive 113Symbol.toStringTag 113Symbol.unscopables 114第 11 章 Proxy 和 Reflect 11611.1 Proxy 概述 11611.2 Proxy 实例的方法 119get() 119set() 121apply() 122has() 123construct() 123deleteProperty() 124defineProperty() 125enumerate() 125getOwnPropertyDescriptor() 126getPrototypeOf() 126isExtensible() 127ownKeys() 127preventExtensions() 128setPrototypeOf() 12811.3 Proxy.revocable() 12911.4 Reflect 概述 12911.5 Reflect 对象的方法 130第 12 章 二进制数组 13312.1 ArrayBuffer 对象 134概述 134ArrayBuffer.prototype.byteLength 135ArrayBuffer.prototype.slice() 135ArrayBuffer.isView() 13612.2 TypedArray 视图 136概述 136构造函数 136数组方法 138字节序 140BYTES_PER_ELEMENT 属性 141ArrayBuffer 与字符串的互相转换 142溢出 142XIV目录TypedArray.prototype.buffer 143TypedArray.prototype.byteLength,TypedArray.prototype.byteOffset 143TypedArray.prototype.length 143TypedArray.prototype.set() 144TypedArray.prototype.subarray() 144TypedArray.prototype.slice() 144TypedArray.of() 144TypedArray.from() 14512.3 复合视图 14512.4 DataView 视图 14612.5 二进制数组的应用 148AJAX 148Canvas 148WebSocket 149Fetch API 149File API 149第 13 章 Set 和 Map 数据结构 15113.1 Set 151基本用法 151Set 实例的属性和方法 152遍历操作 15313.2 WeakSet 15513.3 Map 157Map 结构的目的和基本用法 157实例的属性和操作方法 159遍历方法 160与其他数据结构的互相转换 16213.4 WeakMap 164第 14 章 Iterator 和 for...of 循环 16614.1 Iterator 的概念 16614.2 数据结构的默认 Iterator 接口 16814.3 调用 Iterator 接口的场合 17214.4 字符串的 Iterator 接口 17314.5 Iterator 接口与 Generator 函数 17414.6 遍历器对象的 return()、throw()17514.7 for...of 循环 175数组 175Set 和 Map 结构 177计算生成的数据结构 177类似数组的对象 178对象 179与其他遍历语法的比较 180第 15 章 Generator 函数 18115.1 简介 181基本概念 181yield 语句 182与 Iterator 接口的关系 18415.2 next 方法的参数 18515.3 for...of 循环 18715.4 Generator.prototype.throw() 18915.5 Generator.prototype.return() 19315.6 yield* 语句 19415.7 作为对象属性的 Generator 函数19915.8 Generator 函数的 this 20015.9 Generator 函数推导 20115.10 含义 202Generator 与状态机 202Generator 与协程 20215.11 应用 203第 16 章 Promise 对象 20816.1 Promise 的含义 20816.2 基本用法 20816.3 Promise.prototype.then() 21116.4 Promise.prototype.catch() 21216.5 Promise.all() 215XV目录16.6 Promise.race() 21616.7 Promise.resolve() 21616.8 Promise.reject() 21716.9 两个有用的附加方法 218done() 218finally() 21816.10 应用 219加载图片 219Generator 函数与 Promise 的结合 21916.11 async 函数 220第 17 章 异步操作和 async 函数 22117.1 基本概念 221异步 221回调函数 221Promise 22217.2 Generator 函数 223协程 223Generator 函数的概念 223Generator 函数的数据交换和错误处理224异步任务的封装 22417.3 Thunk 函数 225参数的求值策略 225Thunk 函数的含义 226JavaScript 语言的 Thunk 函数 226Thunkify 模块 227Generator 函数的流程管理 228Thunk 函数的自动流程管理 22917.4 co 模块 230基本用法 230co 模块的原理 230基于 Promise 对象的自动执行 231co 模块的源码 232处理并发的异步操作 23317.5 async 函数 234含义 234async 函数的实现 235async 函数的用法 236注意点 236与 Promise、Generator 的比较 238第 18 章 Class 24018.1 Class 基本语法 240概述 240constructor 方法 243实例对象 243name 属性 244Class 表达式 245不存在变量提升 245严格模式 24618.2 Class 的继承 246基本用法 246类的 prototype 属性和 __proto__ 属性247extends 的继承目标 248Object.getPrototypeOf() 249super 关键字 249实例的 __proto__ 属性 25018.3 原生构造函数的继承 25018.4 Class 的取值函数(getter)和存值函数(setter) 25318.5 Class 的 Generator 方法 25418.6 Class 的静态方法 25418.7 Class 的静态属性 25518.8 new.target 属性 25618.9 Mixin 模式的实现 258第 19 章 修饰器 25919.1 类的修饰 25919.2 方法的修饰 261XVI目录19.3 为什么修饰器不能用于函数 26219.4 core-decorators.js 263@autobind 263@readonly 263@override 263@deprecate(别名 @deprecated) 264@suppressWarnings 26519.5 使用修饰器实现自动发布事件26519.6 Mixin 26619.7 Trait 26719.8 Babel 转码器的支持 269第 20 章 Module 27020.1 严格模式 27120.2 export 命令 27120.3 import 命令 27220.4 模块的整体加载 27320.5 module 命令 27420.6 export default 命令 27420.7 模块的继承 27620.8 ES6 模块加载的实质 27720.9 循环加载 278CommonJS 模块的加载原理 279CommonJS 模块的循环加载 279ES6 模块的循环加载 28020.10 ES6 模块的转码 282ES6 module transpiler 282SystemJS 282第 21 章 编程风格 28421.1 块级作用域 284let 取代 var 284全局常量和线程安全 285严格模式 28521.2 字符串 28521.3 解构赋值 28521.4 对象 28621.5 数组 28821.6 函数 28821.7 Map 结构 28921.8 Class 29021.9 模块 29121.10 ESLint 的使用 292第 22 章 读懂 ECMAScript 规格 29322.1 概述 29322.2 相等运算符 29322.3 数组的空位 29522.4 数组的 map 方法 296第 23 章 参考链接 29923.1 官方文件 29923.2 综合介绍 29923.3 let 和 const 30223.4 解构赋值 30223.5 字符串 30323.6 正则 30423.7 数值 30423.8 数组 30423.9 函数 30523.10 对象 30623.11 Proxy 和 Reflect 30623.12 Symbol 30823.13 二进制数组 30823.14 Set 和 Map 30923.15 Iterator 31023.16 Generator 31123.17 Promise 对象 31223.18 Class 31423.19 Decorator 31423.20 Module 31523.21 工具 316
前言/序言
2012年年底,我开始动手做一个开源项目《JavaScript标准参考教程》(https://github.com/ruanyf/jstutorial)。原来的设想是将自己的学习笔记整理成一本书,哪里料到,这个项目不断膨胀,最后变成了关于ECMAScript 5及其外围API的全面解读和参考手册,写了一年多还没写完。
那个项目的最后一章就是ECMAScript 6的语法简介。那一章也是越写越长,最后我不得不决定,把它独立出来,作为一个新项目,也就是您现在看到的这本书。
JavaScript已经是互联网开发的第一大语言,而且正在变成一种全领域的语言。著名程序员Jeff Atwood甚至提出了一条“Atwood定律”:“所有可以用JavaScript编写的程序,最终都会出现JavaScript的版本。”(Any application that can be written in JavaScript will eventually be written in JavaScript.)
ECMAScript正是JavaScript的国际标准,这就决定了该标准的重要性。而ECMAScript 6是ECMAScript历史上最大的一次版本升级,在语言的各个方面都有极大的变化,即使是熟练的JavaScript程序员,也需要重新学习。由于ES6的设计目标是企业级开发和大型项目,所以可以预料,除了互联网开发者,将来还会有大量应用程序开发者(甚至操作系统开发者)成为ES6的学习者。
我写作这本书的目标,就是想为上面这些学习者,提供一本篇幅较短、简明易懂、符合中文表达习惯的ES6教程。它由浅入深、循序渐进,既有重要概念的讲解,又有API接口的罗列,便于日后当作参考手册查阅,还提供大量示例代码,让读者不仅一看就懂,还能举一反三,直接复制用于实际项目之中。
需要声明的是,为了突出重点,本书只涉及ES6与ES5的不同之处,不对JavaScript已有的语法做全面讲解,毕竟市场上这样的教程已有很多了。因此,本书不是JavaScript入门教材,不适合初学者。阅读本书之前,需要对JavaScript的基本语法有所了解。
我本人也是一个ES6 的学习者,不敢说自己有多高的水平,只是较早地接触了这个主题,持续地读了许多资料,追踪标准的进展,做了详细的笔记而已。虽然我尽了最大努力,并且原稿在GitHub 上公开后,已经得到了大量的勘误,但是本书的不如人意之处恐怕还是有不少。
阮一峰
2014 年6 月4 日,写于上海 阮一峰
2014 年6 月4 日,写于上海
ES 6 标准入门(第2版) 下载 mobi epub pdf txt 电子书 格式