《代码大全2》(英文限量珍藏版)《程序员修炼之道》《计算机程序的构造和解释》《C程序设计语言》《算法导论》《重构 改善既有代码的设计》《人月神话》《设计模式》(典藏版)《计算机程序设计艺术》《编译原理》《深入浅出设计模式》《代码整洁之道》《编程珠玑》《修改软件的艺术》《编码:隐匿在计算机软硬件背后的语言》《黑客与画家》《深入理解计算机系统》《HTTP权威指南》《重来》《集体智慧编程》《活着》《编程之美》《程序员思维修炼》《系统化思维导论》《大话数据结构》《UNIX网络编程》《高性能Linux服务器运维实战》《TCP/IP详解》《计算机网络:自顶向下方法》《UNIX环境高级编程》《程序员的自我修养》《数据密集型应用系统设计》《现代操作系统》《操作系统真象还原》《Windows核心编程》《深入理解LINUX内核》《传世经典书丛:UNIX编程艺术》《清醒思考的艺术》《C和指针》《C专家编程》《C 陷阱与缺陷》《C++ Primer Plus》《STL源码剖析》《Effective C++》《深度探索C++对象模型》《Java核心技术》《Effective Java中文版》《深入理解Java虚拟机》《Java并发编程实战》《轻量级Java Web整合开发》《精通Spring》《Java编程思想》《Java性能权威指南》《大话设计模式》《图解HTTP》《Redis实战》《Redis设计与实现》《高性能MySQL》《鸟哥的Linux私房菜》《Spring Cloud Alibaba微服务原理与实战》《第一本Docker书》《MySQL必知必会》《MySQL技术内幕:InnoDB存储引擎》《深入浅出MySQL》《SQL基础教程》《CSS权威指南》《CSS揭秘》《CSS世界》《Head First HTML与CSS》《零基础学HTML5+CSS3》《HTML5+CSS3+JavaScript从入门到精通》《JavaScript DOM编程艺术》《JavaScript高级程序设计》《JavaScript语言精粹》《你不知道的JavaScript 》《JavaScript设计模式与开发实践》《ES6标准入门》《深入理解ES6》《高性能JavaScript》《数据结构与算法JavaScript描述》《JavaScript ES6 函数式编程入门经典》《HTML5权威指南》《锋利的jQuery》《深入React技术栈》《React状态管理与同构实战》《React进阶之路》《React学习手册》《React Native移动开发实战》《React+Redux前端开发实战》《Spring Boot+Vue全栈开发实战》《Vue.js项目实战》《Vue.js入门与商城开发实战》《Vue.js 从入门到实战》《Vue.js实战》《深入浅出Node.js》《Node.js实战》《Node.js无服务器应用实战》《Node与Express开发》《编写可维护的JavaScript》《大型网站技术架构 核心原理与案例分析》《Web性能权威指南》《点石成金》

《深入理解ES6》

点击购买


编辑推荐

  √ 不识老尼,枉为前端攻城狮,其成名作《JS高级程序设计》曾名动江湖。

  √ Redux缔造者与react核心成员作序力荐,盛赞本书对JS的剖析无人企及。

  √ 用直截了当的方式传达艰深的技术细节,对技术的理解方可高效送达。

  √ 中高级开发者藉由本书可一举迈入对标准及其未来特性熟稔于心之化境。


内容简介

ES6是ECMAScript标准十余年来变动大的一个版本,其中添加了许多新的语法特性,既有大家耳熟能详的Promise,也有闻所未闻的Proxy代理和Reflection反射;既有可以通过转译器(Transpiler)等方式在旧版本浏览器中实现兼容的let、const、不定参数、展开运算符等功能,亦有无论如何都无法实现向前兼容的尾调用优化。深入理解ES6的特性对于所有JavaScript开发者而言至关重要,在可预见的未来,ES6中引入的语言特性会成为JavaScript应用程序的主流特性,这也是《深入理解ES6》的初衷。希望你通过阅读《深入理解ES6》可以了解ES6的新特性,并在需要时能够随时使用。


作者简介

Nicholas C. Zakas自2000年以来一直致力于Web应用程序的开发,重点关注前端开发,并以写作和讲述前沿*实践而闻名。他曾于雅虎主页任职5年有余,他也是多本书的作者,其中包括The Principles of Object-Oriented JavaScript(No Starch Press出版社)和Professional JavaScript for Web Developers(Wrox出版社)。

关于技术评审

Juriy Zaytsev(在网上以kangax著称)是纽约的一位前端网站开发人员。自2007年以来,他一直在探索JavaScript的怪异特性并撰写相关文章。Juriy为多个开源项目做出过贡献,其中包括Prototype.js和其他的热门项目,如他自己的Fabric.js。他是按需定制打印服务printio.ru的共同创始人,目前任职于Facebook。

刘振涛,腾讯前端工程师;infoQ 网站资深译者,负责重点连载专栏《深入浅出ES6》;长期关注Web开发领域新生,尤其是 Ecma* 6;爱好摄影、网球,重度信息癖(Infomania)患者。


目录

第1章 块级作用域绑定 1

var声明及变量提升(Hoisting)机制 1

块级声明 3

-- let声明 3

-- 禁止重声明 4

-- const声明 4

-- 临时死区(Temporal Dead Zone) 6

循环中的块作用域绑定 7

-- 循环中的函数 8

-- 循环中的let声明 9

-- 循环中的const声明 10

全局块作用域绑定 12

块级绑定最佳实践的进化 13

小结 13

第2章 字符串和正则表达式 14

更好的Unicode支持 14

-- UTF-16码位 15

-- codePointAt()方法 16

-- String.fromCodePoint()方法 17

-- normalize()方法 17

-- 正则表达式u修饰符 19

其他字符串变更 21

-- 字符串中的子串识别 21

-- repeat()方法 22

其他正则表达式语法变更 23

-- 正则表达式y修饰符 23

-- 正则表达式的复制 26

-- flags属性 27

模板字面量 28

-- 基础语法 28

-- 多行字符串 29

-- 字符串占位符 31

-- 标签模板 32

小结 36

第3章 函数 37

函数形参的默认值 37

-- 在ECMAScript 5中模拟默认参数 38

-- ECMAScript 6中的默认参数值 38

-- 默认参数值对arguments对象的影响 40

-- 默认参数表达式 42

-- 默认参数的临时死区 44

处理无命名参数 46

-- ECMAScript 5中的无命名参数 46

-- 不定参数 47

增强的Function构造函数 49

展开运算符 50

name属性 52

-- 如何选择合适的名称 52

-- name属性的特殊情况 52

明确函数的多重用途 54

-- 在ECMAScript 5中判断函数被调用的方法 54

-- 元属性(Metaproperty)new.target 55

块级函数 57

-- 块级函数的使用场景 58

-- 非严格模式下的块级函数 58

箭头函数 59

-- 箭头函数语法 60

-- 创建立即执行函数表达式 62

-- 箭头函数没有this绑定 63

-- 箭头函数和数组 65

-- 箭头函数没有arguments绑定 66

-- 箭头函数的辨识方法 66

尾调用优化 67

-- ECMAScript 6中的尾调用优化 68

-- 如何利用尾调用优化 69

小结 71

第4章 扩展对象的功能性 72

对象类别 72

对象字面量语法扩展 73

-- 属性初始值的简写 73

-- 对象方法的简写语法 74

-- 可计算属性名(Computed Property Name) 75

新增方法 76

-- Object.is()方法 76

-- Object.assign()方法 77

重复的对象字面量属性 80

自有属性枚举顺序 81

增强对象原型 82

-- 改变对象的原型 82

-- 简化原型访问的Super引用 83

正式的方法定义 86

小结 88

第5章 解构:使数据访问更便捷 89

为何使用解构功能 89

对象解构 90

-- 解构赋值 91

-- 默认值 92

-- 为非同名局部变量赋值 93

-- 嵌套对象解构 94

数组解构 96

-- 解构赋值 97

-- 默认值 99

-- 嵌套数组解构 99

-- 不定元素 99

混合解构 101

解构参数 102

-- 必须传值的解构参数 103

-- 解构参数的默认值 104

小结 106

第6章 Symbol和Symbol属性 107

创建Symbol 107

Symbol的使用方法 109

Symbol共享体系 110

Symbol与类型强制转换 112

Symbol属性检索 112

通过well-known Symbol暴露内部操作 113

-- Symbol.hasInstance方法 114

-- Symbol.isConcatSpreadable属性 116

-- Symbol.match、Symbol.replace、Symbol.search和Symbol.split属性 118

-- Symbol.toPrimitive方法 120

-- Symbol.toStringTag属性 122

-- Symbol.unscopables属性 125

小结 127

第7章 Set集合与Map集合 128

ECMAScript 5中的Set集合与Map集合 129

该解决方案的一些问题 129

ECMAScript 6中的Set集合 131

-- 创建Set集合并添加元素 131

-- 移除元素 133

-- Set集合的forEach()方法 133

-- 将Set集合转换为数组 136

-- Weak Set集合 136

ECMAScript 6中的Map集合 139

-- Map集合支持的方法 140

-- Map集合的初始化方法 141

-- Map集合的forEach()方法 142

-- Weak Map集合 143

小结 147

第8章 迭代器(Iterator)和生成器(Generator) 149

循环语句的问题 149

什么是迭代器 150

什么是生成器 151

-- 生成器函数表达式 153

-- 生成器对象的方法 154

可迭代对象和for-of循环 155

-- 访问默认迭代器 156

-- 创建可迭代对象 157

内建迭代器 158

-- 集合对象迭代器 158

-- 字符串迭代器 163

-- NodeList迭代器 164

展开运算符与非数组可迭代对象 165

高级迭代器功能 166

-- 给迭代器传递参数 166

-- 在迭代器中抛出错误 168

-- 生成器返回语句 170

-- 委托生成器 171

异步任务执行 174

-- 简单任务执行器 174

-- 向任务执行器传递数据 176

-- 异步任务执行器 177

小结 180

第9章 JavaScript中的类 181

ECMAScript 5中的近类结构 181

类的声明 182

-- 基本的类声明语法 182

-- 为何使用类语法 184

类表达式 186

-- 基本的类表达式语法 186

-- 命名类表达式 187

作为一等公民的类 189

访问器属性 190

可计算成员名称 192

生成器方法 193

静态成员 195

继承与派生类 196

-- 类方法遮蔽 199

-- 静态成员继承 199

-- 派生自表达式的类 200

-- 内建对象的继承 203

-- Symbol.species属性 205

在类的构造函数中使用new.target 208

小结 210

第10章 改进的数组功能 211

创建数组 211

-- Array.of()方法 212

-- Array.from()方法 213

为所有数组添加的新方法 216

-- find()方法和findIndex()方法 217

-- fill()方法 217

-- copyWithin()方法 218

定型数组 219

-- 数值数据类型 220

-- 数组缓冲区 221

-- 通过视图操作数组缓冲区 221

定型数组与普通数组的相似之处 228

-- 通用方法 229

-- 相同的迭代器 230

-- of()方法和from()方法 230

定型数组与普通数组的差别 231

-- 行为差异 231

-- 缺失的方法 232

-- 附加方法 233

小结 234

第11章 Promise与异步编程 235

异步编程的背景知识 235

-- 事件模型 236

-- 回调模式 236

Promise的基础知识 239

-- Promise的生命周期 239

-- 创建未完成的Promise 242

-- 创建已处理的Promise 244

-- 执行器错误 247

全局的Promise拒绝处理 248

Node.js环境的拒绝处理 248

浏览器环境的拒绝处理 251

串联Promise 253

-- 捕获错误 254

-- Promise链的返回值 255

-- 在Promise链中返回Promise 256

响应多个Promise 259

-- Promise.all()方法 259

-- Promise.race()方法 260

自Promise继承 262

基于Promise的异步任务执行 263

小结 267

第12章 代理(Proxy)和反射(Reflection)api 269

数组问题 269

代理和反射 270

创建一个简单的代理 271

使用set陷阱验证属性 272

用get陷阱验证对象结构(Object Shape) 274

使用has陷阱隐藏已有属性 275

用deleteProperty陷阱防止删除属性 277

原型代理陷阱 279

-- 原型代理陷阱的运行机制 279

-- 为什么有两组方法 281

对象可扩展性陷阱 282

-- 两个基础示例 283

-- 重复的可扩展性方法 284

属性描述符陷阱 285

-- 给Object.defineProperty()添加限制 286

-- 描述符对象限制 287

-- 重复的描述符方法 288

ownKeys陷阱 290

函数代理中的apply和construct陷阱 291

-- 验证函数参数 292

-- 不用new调用构造函数 294

-- 覆写抽象基类构造函数 296

-- 可调用的类构造函数 297

可撤销代理 298

解决数组问题 299

-- 检测数组索引 300

-- 添加新元素时增加length的值 300

-- 减少length的值来删除元素 302

-- 实现MyArray类 304

将代理用作原型 307

-- 在原型上使用get陷阱 307

-- 在原型上使用set陷阱 308

-- 在原型上使用has陷阱 309

-- 将代理用作类的原型 310

小结 314

第13章 用模块封装代码 315

什么是模块 315

导出的基本语法 316

导入的基本语法 317

-- 导入单个绑定 318

-- 导入多个绑定 318

-- 导入整个模块 318

-- 导入绑定的一个微妙怪异之处 320

导出和导入时重命名 320

模块的默认值 321

-- 导出默认值 321

-- 导入默认值 322

重新导出一个绑定 323

无绑定导入 324

加载模块 325

-- 在Web浏览器中使用模块 325

-- 浏览器模块说明符解析 329

小结 330

附录A ECMAScript 6中较小的改动 331

附录B 了解ECMAScript 7(2016) 337


精彩书摘

  《深入理解ES6》:
  十年前谁也无法料到,彼时只能写小动画的玩具语言JavaScript竟会有如今之威力,这愈发显现出Atwood定律“凡是能用JavaScript写出来的应用,最终都会用JavaScript来写”的正确性。追本溯源,这与ECMAScript的发展功不可没。
  然而,ECMAScript的发展并非一帆风顺。
  1999年末,ECMA-262第3版[1]正式定稿,在之后的五六年中,几乎看不到标准的任何新进展。直到2005年左右,随着Google在多个重交互的应用中普及Ajax,开发者们逐渐接受这项新技术并逐步恢复对JavaScript的关注。于是,JavaScript创始人Brendan Eich紧锣密鼓地筹划ECMAScript 4标准,直到2007年,耗时两年的ECMAScript 4标准扩充工作在Jeff Dyer看来已经达到ECMAScript 3的两倍[2],Brendan遂撰文[3] 进一步澄清与解释。
  Douglas Crockford认为这是一种过度复杂的税负[4],并联合微软起草ECMAScript 3.1提案,同时,微软也在TC-39会议中正式反对ES4中的部分标准。冲突过后,占据舆论优势的ECMAScript 3.1于2009年作为ES5正式发布[5]。
  ECMAScript 4并未就此消亡。委员会全体成员将ECMAScript 3.1与ECMAScript 4中的精华保留,作为ECMAScript Harmony(取和谐之意),它转而成为委员会的下一个目标ECMAScript 6,并于2015年6月正式定稿,最终被命名为ECMAScript 2015。委员会一改往日冗长的议程,约定每年必出一版,通常以当年年份命名。截至此书翻译完毕,ECMAScript 2016也于2016年6月正式定稿[6],最新标准尚在进程中[7]。
  《Understanding ECMAScript 6》一书是作者Nicholas C. Zakas在GitHub开源社区[8]撰写而成。作为标准的转述者,存在部分理解误区合情合理,本译作基于No Starch Press出版社于2016年8月出版的首印版,适当参考GitHub中的讨论集结而成。
  在本书翻译结束之际,感慨万千。首先感谢裕波,是他的引荐让我有机会翻译本书。特别感谢李松峰老师、Hax老师与克军老师的不吝赐教,帮助我审校翻译内容。还要感谢博文视点的侠少(张春雨编辑),他高标准、严要求的专业态度时刻鞭策我前行。
  感谢就职于腾讯的时光,带我入行的导师张坤、为我解答所有疑惑的Leader陈恕胜、共同学习成长的兄弟陈炜鑫及其他伙伴,你们一丝不苟的态度不断磨练我的心性。

链接: https://www.fly63.com/course/26_1220