《深入理解ES6》是一本专门为已经熟悉JavaScript和ECMAScript 5的开发者而写的教程。本书主要聚焦于介绍ES6的最新特性以及如何在浏览器或Node.js中进行实际的应用开发。对于那些想要了解JavaScript最新语法特性并在项目中实现的中级或高级开发者来说,这本书是不可或缺的。通过深入剖析ES6的各种功能和用法,本书帮助读者更好地理解和应用这门语言,提升开发效率和代码质量。无论是对于个人学习还是职业发展,这本书都是一本非常有价值的参考书。
深入理解ES6 电子书封面
读者评价
个人感觉尼古拉斯比阮老师讲得好。同样是全面的论述 ES6,前者更像是引领你去全面吸收它,后者有点喜欢纠结一些奇怪的点。
Zakas的又一部杰作,他的作品最优秀的地方在于只是阐述,很少评价,这在帮助我们夯实基础时十分有意义,我也喜欢这种风格。我是中英文参照阅读的,译本后半部分有一些文字上的纰漏,但是总体来说忠实原文,水平还是相当不错,希望再版时可以修复这些文字问题。
阮一峰的那本学究气太重,感觉在读规范,这本就平易多了,语句都很容易理解。
内容介绍
ES6是ECMAScript标准十余年来变动大的一个版本,其中添加了许多新的语法特性,既有大家耳熟能详的Promise,也有闻所未闻的Proxy代理和Reflection反射;既有可以通过转译器(Transpiler)等方式在旧版本浏览器中实现兼容的let、const、不定参数、展开运算符等功能,亦有无论如何都无法实现向前兼容的尾调用优化。深入理解ES6的特性对于所有JavaScript开发者而言至关重要,在可预见的未来,ES6中引入的语言特性会成为JavaScript应用程序的主流特性,这也是《深入理解ES6》的初衷。希望你通过阅读《深入理解ES6》可以了解ES6的新特性,并在需要时能够随时使用。
目录
- 第1章 块级作用域绑定 1
- var声明及变量提升(Hoisting)机制 1
- 块级声明 3
- 循环中的块作用域绑定 7
- 全局块作用域绑定 12
- 块级绑定最佳实践的进化 13
- 小结 13
- 第2章 字符串和正则表达式 14
- 更好的Unicode支持 14
- 其他字符串变更 21
- 其他正则表达式语法变更 23
- 模板字面量 28
- 小结 36
- 第3章 函数 37
- 函数形参的默认值 37
- 处理无命名参数 46
- 增强的Function构造函数 49
- 展开运算符 50
- name属性 52
- 明确函数的多重用途 54
- 块级函数 57
- 箭头函数 59
- 尾调用优化 67
- 小结 71
- 第4章 扩展对象的功能性 72
- 对象类别 72
- 对象字面量语法扩展 73
- 新增方法 76
- 重复的对象字面量属性 80
- 自有属性枚举顺序 81
- 增强对象原型 82
- 正式的方法定义 86
- 小结 88
- 第5章 解构:使数据访问更便捷 89
- 为何使用解构功能 89
- 对象解构 90
- 数组解构 96
- 混合解构 101
- 解构参数 102
- 小结 106
- 第6章 Symbol和Symbol属性 107
- 创建Symbol 107
- Symbol的使用方法 109
- Symbol共享体系 110
- Symbol与类型强制转换 112
- Symbol属性检索 112
- 通过well-known Symbol暴露内部操作 113
- 小结 127
- 第7章 Set集合与Map集合 128
- ECMAScript 5中的Set集合与Map集合 129
- 该解决方案的一些问题 129
- ECMAScript 6中的Set集合 131
- ECMAScript 6中的Map集合 139
- 小结 147
- 第8章 迭代器(Iterator)和生成器(Generator) 149
- 循环语句的问题 149
- 什么是迭代器 150
- 什么是生成器 151
- 可迭代对象和for-of循环 155
- 内建迭代器 158
- 展开运算符与非数组可迭代对象 165
- 高级迭代器功能 166
- 异步任务执行 174
- 小结 180
- 第9章 JavaScript中的类 181
- ECMAScript 5中的近类结构 181
- 类的声明 182
- 类表达式 186
- 作为一等公民的类 189
- 访问器属性 190
- 可计算成员名称 192
- 生成器方法 193
- 静态成员 195
- 继承与派生类 196
- 在类的构造函数中使用new.target 208
- 小结 210
- 第10章 改进的数组功能 211
- 创建数组 211
- 为所有数组添加的新方法 216
- 定型数组 219
- 定型数组与普通数组的相似之处 228
- 定型数组与普通数组的差别 231
- 小结 234
- 第11章 Promise与异步编程 235
- 异步编程的背景知识 235
- Promise的基础知识 239
- 全局的Promise拒绝处理 248
- Node.js环境的拒绝处理 248
- 浏览器环境的拒绝处理 251
- 串联Promise 253
- 响应多个Promise 259
- 自Promise继承 262
- 基于Promise的异步任务执行 263
- 小结 267
- 第12章 代理(Proxy)和反射(Reflection)API 269
- 数组问题 269
- 代理和反射 270
- 创建一个简单的代理 271
- 使用set陷阱验证属性 272
- 用get陷阱验证对象结构(Object Shape) 274
- 使用has陷阱隐藏已有属性 275
- 用deleteProperty陷阱防止删除属性 277
- 原型代理陷阱 279
- 对象可扩展性陷阱 282
- 属性描述符陷阱 285
- ownKeys陷阱 290
- 函数代理中的apply和construct陷阱 291
- 可撤销代理 298
- 解决数组问题 299
- 将代理用作原型 307
- 小结 314
- 第13章 用模块封装代码 315
- 什么是模块 315
- 导出的基本语法 316
- 导入的基本语法 317
- 导出和导入时重命名 320
- 模块的默认值 321
- 重新导出一个绑定 323
- 无绑定导入 324
- 加载模块 325
- 小结 330
- 附录A ECMAScript 6中较小的改动 331
- 附录B 了解ECMAScript 7(2016) 337
- 索引 343
遗留问题 setter函数以及getter函数的作用 对象的访问器属性:get的作用 54-58的函数多种用途以及块级函数看不懂 64-65的箭头函数没有this绑定看不懂 call、apply和bind方法 正确使用Symbol的方法 变量: 不可以访问 变量声明后:可以访问 但是值为undefined 变量初始化后:可以访问 值不是undefined 使用let或者const实现块级声明,这个时候语言引擎会将声明放到临时死区中。 使用var会覆盖一个已经存在的全局属性。 使用策略:默认使用const,只有确定变量需要改变的时候才使用let。 字符串: 如果文字的编码超过了基本多文种平面的话(16位二进制),则需要加入代理对来表示这个文字。 准确比较字符串a.normalize() === b.normalize() 字符串识别方法:includesstartsWithendsWith 返回新字符串:repeat 正则的修饰符:sticky ?u修饰符:代理对检测修饰符i修饰符:大小写无关修饰符global修饰符 获取正则原表达式的文本:source属性获取修饰符:flags属性 模板字面量基础用法:用反撇号替换了引号,内部使用反撇号需要用反斜杠转义;可以直接换行也可以用\n转义字符串占位符:${任意的JS表达式}模板标签:创建领域专用语言DSL,函数化处理literals(文字)以及substitutions(模板字面量)
es6看工具书描述 就加了几个功能点,但是作者把每一个功能点都丰富化了,震惊原来增加的每个功能点都有这么多妙用,最可喜的是作者居然把这么复杂的内容用浅显易懂的文字和代码描述得清清楚楚。没有半点故弄玄虚,绝不会像看某些大神的文章那样有似懂非懂的感觉。 我看的是中文译本,译者提到大师有些小知识点和实际运行有出入。不妨碍这本书成为经典。 想了解ES6的强烈推荐来看。作者真的良心,看这本书有种成绩很好有很热心肠的同学教你功课的感觉。