新書推薦:
《
乾隆制造
》
售價:NT$
398.0
《
资治通鉴臣光曰辑存 资治通鉴目录(司马光全集)(全二册)
》
售價:NT$
1316.0
《
明代社会变迁时期生活质量研究
》
售價:NT$
1367.0
《
律令国家与隋唐文明
》
售價:NT$
332.0
《
紫云村(史杰鹏笔下大唐小吏的生死逃亡,新历史主义小说见微之作,附赠5张与小说内容高度契合的宣纸彩插)
》
售價:NT$
449.0
《
现代吴语的研究(中华现代学术名著3)
》
售價:NT$
296.0
《
天下的当代性:世界秩序的实践与想象(新版)
》
售價:NT$
352.0
《
德国天才4:断裂与承续
》
售價:NT$
500.0
編輯推薦:
不识老尼,枉为前端攻城狮,其成名作《JS高级程序设计》曾名动江湖。
Redux缔造者与React核心成员作序力荐,盛赞本书对JS的剖析无人企及。
用直截了当的方式传达艰深的技术细节,对技术的理解方可高效送达。
中高级开发者藉由本书可一举迈入对标准及其未来特性熟稔于心之化境。
內容簡介:
ES6是迄今为止JavaScript内核首当其冲的一次重大更新。本书是领域大家Nicholas C. Zakas撰写的一份ES6的完整指南,书中详细讲解了ES 6在JavaScript对象类型、语法及其他方面激动人心的改变。每一章都含有可运行于任何JavaScript环境的示例代码,你可以利用这些代码测试、理解ES6中的新功能。无论你是Web开发者还是Node.js开发者,都可以通过本书来更好地理解和运用ES6,或是顺利地从ES5迁移到ES6。
關於作者:
Nicholas C. Zakas自2000年以来一直致力于Web应用程序,重点关注前端开发,并以写作和讲述前沿*实践而闻名。他曾经是雅虎主页的核心前端工程师,在雅虎的五年中不断磨练经验;他也是多本书的作者,其中包括JavaScript面向对象精要(No Starch Press,2014)和JavaScript高级程序设计(Wrox,2012)。
刘振涛,腾讯前端工程师;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
索引 343
內容試閱 :
序
ECMAScript 6如暴风雨般骤临世界,人们期待已久而它却突然出现,传播之快始料未及。每个人都与ECMAScript 6有着一段不同的故事,以下是我的故事。
2013年,我还在一家创业公司工作,正在从iOS转向Web研发,之后我参加了JavaScript开源社区并共同创建了Redux。当时我正在努力学习Web开发,而且我非常害怕,我的团队必须在短短几个月的时间内将我们的产品用JavaScript 重构为Web版。
起初我认为用JavaScript编写大型软件的想法很可笑,但是一名团队成员说服了我,他说JavaScript不是一门玩具语言。我同意撇开成见试一试,于是打开MDN和StackOverflow首次深入学习JavaScript。我对这门简约的语言着了迷,我的同事还教我如何使用工具,例如代码整理工具(linter)和代码合并工具(bundler) 。在这几个星期里我恍然大悟,原来我如此喜欢编写JavaScript代码。
但没有一门语言是完美的,由于使用过其他语言,我非常希望JavaScript也可以频繁更新,但在这10年间,ECMAScript 5是唯一的重大更新,它只实现了一小部分特性,完全支持浏览器需要数10年的时间。彼时,即将到来的代号为Harmony的ECMAScript 6(ES6)规范尚未完成,遥遥无期。也许在10年内我能够写一些ECMAScript 6代码吧。我想。
一些实验性的转译器(Transpiler),如谷歌的Traceur,可以将代码从ECMAScript 6转换成ECMAScript 5。它们大多功能非常有限,或难以插入现有的JavaScript构建管道。但是,随后出现的新型转译器 6to5改变了一切。它易于安装,可以很好地集成在现有的工具中,生成的代码可读,于是其像野火般蔓延开来。6to5现在被称作Babel,在标准定稿前就开始为主流受众提供ECMAScript 6的特性。几个月以来,ECMAScript 6无处不在。
出于各种原因,ECMAScript 6已经把社区割裂开来。正如本书所讲,在许多主流浏览器中ECMAScript 6仍未完全实现。当你学习这门语言时,不得不进行的构建步骤足以使人退缩。一些库的文档和示例中有ECMAScript 6的代码,你可能想知道这些库是否可以在ECMAScript 5环境中使用。这令人感到困惑,由于这门语言之前几乎从未改变过,因此许多人对于新特性的加入并没有十分期待,而有一部分人在焦急地等待新功能的到来,并希望所有的这些新功能能放在一起使用在某些情况下,甚至为了使用而使用,不管是否必要。
正当我对JavaScript的使用逐渐熟练时,我感觉再往前走很困难,我不得不学习一门新的语言。那几个月的时间里我感到很糟糕。最后在圣诞节前夕,我开始阅读本书的草稿,我简直爱不释手,在凌晨3点,当参加聚会的每一位成员都已熟睡,而我却理解了ECMAScript 6!
Nicholas是一位非常有天赋的老师。他以直截了当的方式传达深刻的细节,让你能够理解所有这些知识。除了本书之外,他也因创建ESLint而出名,这是一个被下载了数百万次的JavaScript代码分析器。
Nicholas对JavaScript的了解程度很少有人能够企及,所以不要错过吸取新知识的机会。阅读本书,你将对掌握ECMAScript 6充满信心。
Dan Abramov
React核心团队成员及Redux的创造者
前言
JavaScript核心的语言特性是在标准ECMA-262中被定义的。该标准中定义的语言被称作ECMAScript,它是JavaScript的子集。在浏览器与Node.js环境中通过附加的对象和方法可添加更多新功能,而JavaScript的核心依然保持ECMAScript的定义。总的来说,ECMA-262标准的持续发展对于JavaScript的成功功不可没。ECMAScript 6是JavaScript最新的重大更新,本书将为你讲解其中的改动。
ECMAScript 6之路
2007年,JavaScript走向了发展中的转折点,逐渐兴起的Ajax开创了动态Web应用的新时代,而自1999年第三版ECMA-262发布以来,JavaScript却没有丝毫改变。当时,负责推动ECMAScript 语言发展的TC-39委员会将大量规范草案整合在了ECMAScript 4中,新增的语言特性涉足甚广,包括:模块、类、类继承、私有对象成员、可选类型注释及众多其他的特性。
然而,TC-39组织内部对ECMAScript 4的动议草案产生了巨大分歧,部分成员认为不应该一次性在第四版标准中加入过多的新功能,而来自雅虎、谷歌和微软的技术负责人则共同商讨并提交了一份ECMAScript 3.1草案作为下一代ECMAScript的可选方案,此处的3.1意在表明只是对现有标准进行小幅的增量修改。
ECMAScript 3.1引入的语法变化极少,这一版标准相对而言更专注于优化属性特性,支持原生JSON,以及为已有对象增添新的方法。委员会曾经尝试融合ECMAScript 3.1与ECMAScript 4,但由于对峙双方对语言未来的发展方向分歧过大,最后以失败告终。
到了2008年,JavaScript创始人Brendan Eich宣布TC-39委员会将合力推进ECMAScript 3.1的标准化工作。他们选择将ECMAScript 4中提出的大部分针对语法及特性的改动暂时搁置,到下一个版本ECMAScript的标准化工作完成之后,委员会全体成员再努力融合ECMAScript 3.1和4中的精华,他们还给这个版本起了一个昵称ECMAScript Harmony(取和谐之意)。
经过标准化的ECMAScript 3.1最终作为ECMA-262第五版正式发布,它同时也被称为 ECMAScript 5。委员会表示他们永不发布第四版,以避免与从未面世的ECMAScript 4产生命名冲突。基于ECMAScript Harmony的工作随后陆续展开,继承了精华的ECMAScript 6将成为继ECMAScript 5之后发布的首个新标准。
ECMAScript 6标准的特性已于2015年全部完成,并被正式命名为ECMAScript 2015(由于开发者们对ECMAScript 6更为熟悉,因此本书将继续沿用此称谓)。新标准的变化俯拾即是,大到全新的对象和模式、大幅的语法改动,小到为已有对象扩充新的方法。更令人激动的是,ECMAScript 6中点滴的变化全都致力于解决开发者实际工作中遇到的问题。
关于本书
深入理解ECMAScript 6的特性对于所有JavaScript开发人员来说至关重要,在可预见的未来,ECMAScript 6中引入的语言特性将构成构建JavaScript应用程序的基础。这也是本书的初衷,笔者希望你通过阅读本书来了解ECMAScript 6的新特性,并在需要时随时能够予以使用。
浏览器与Node.js中的兼容性
开发者们正积极地为Web浏览器及Node.js这些JavaScript的宿主环境添加ECMAScript 6的新功能。本书只关注规范中定义的正确行为,不会对比每种实现间的差异。如此一来,读者所使用的JavaScript环境有可能与本书中描述的不一致。
本书的目标读者
本书是专门为熟悉JavaScript和ECMAScript 5的读者准备的指南,帮助大家理解ECMAScript 5和6之间的差异。对ECMAScript 6早已熟稔于心的读者不必继续阅读下去。本书特别适合想了解语言未来特性的JavaScript中高级开发者,无论你的工作环境是Node.js还是Web浏览器,本书都非常适合你。
本书不适合从未写过JavaScript代码的初学者,读者们需要对这门语言的基础知识有一定的理解,这样才能发挥本书的最大效用。
本书概览
本书中的每一个章节与附录都涵盖有ECMAScript 6的不同方面,许多章节一开始都会讨论ECMAScript 6 中新变化的来龙去脉,以及这些改动试图解决的问题。所有章节都包含代码示例来帮助你学习新的语法及概念。
? 第1章 块级作用域绑定 讨论var在块级作用域中的替代方案let和const。
? 第2章 字符串和正则表达式 详尽介绍字符串模板,以及新增的操作与检查字符串的功能。
? 第3章 函数 讨论函数的多处改动,包括箭头函数(Arrow Function)、默认参数(Default Parameters)、不定参数(Rest Parameters)等。
? 第4章 扩展对象的功能性 解读对象创建、修改及使用方面的改动,包括对象字面量语法的变化、新的反射方法等。
? 第5章 解构:使数据访问更便捷 介绍一种通过简明的语法分解对象和数组的方法对象和数组解构。
? 第6章 Symbol和Symbol属性 介绍定义属性的新途径Symbol。Symbol是一种新的原始类型,可用于创建外部无法直接访问的对象属性和方法。
? 第7章 Set集合与Map集合 详述四种新的集合类型:Set、WeakSet、Map及WeakMap。这些类型为数组增添了新的语义、去重机制,以及专门为JavaScript设计的内存管理机制,极大地扩展了数组的实用性。
? 第8章 迭代器(Iterator)和生成器(Generator) 这两个全新的功能可以协助你更有效地处理集合数据,在早期版本的JavaScript中无法实现这样的功能。
? 第9章 JavaScript中的类 介绍JavaScript中首次正式加入的类概念。接触过其他语言的开发者通常会对JavaScript的语法感到困惑,新增的类语法使JavaScript变得更易上手,而且对热衷于JavaScript的开发者来说新
译者序
十年前谁也无法料到,彼时只能写小动画的玩具语言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陈恕胜、共同学习成长的兄弟陈炜鑫及其他伙伴,你们一丝不苟的态度不断磨练我的心性。
最后,特别要感谢我的母亲杨虹女士,每当我不堪于兼顾工作与翻译的时候,总是您的鼓励点亮我前进的道路。
在本书的翻译过程中我力求还原作者本意,但限于时间与水平,翻译不当之处在所难免,还敬请各位读者不吝赐教,我也会及时与出版社同步以备再版时进行修正,或以勘误的形式公布。如您有任何想法与建议,欢迎写信至我的邮箱:lenville@gmail.com。
[1] https:www.ecma-international.orgpublicationsfilesECMA-ST-ARCHECMA-262, 3rd edition, December 1999.pdf
[2] https:mail.mozilla.orgpipermailes-discuss2007-October001442.html
[3] https:brendaneich.com200711es4-news-and-opinion
[4] https:mail.mozilla.orgpipermailes-discuss2008-March002529.html
[5] http:www.ecma-international.orgpublicationsfilesECMA-ST-ARCHECMA-262 5th edition December 2009.pdf
[6] https:www.ecma-international.orgecma-2627.0index.html
[7] https:tc39.github.ioecma262
[8] https:github.comnzakasunderstandinges6
序
ECMAScript 6如暴风雨般骤临世界,人们期待已久而它却突然出现,传播之快始料未及。每个人都与ECMAScript 6有着一段不同的故事,以下是我的故事。
2013年,我还在一家创业公司工作,正在从iOS转向Web研发,之后我参加了JavaScript开源社区并共同创建了Redux。当时我正在努力学习Web开发,而且我非常害怕,我的团队必须在短短几个月的时间内将我们的产品用JavaScript 重构为Web版。
起初我认为用JavaScript编写大型软件的想法很可笑,但是一名团队成员说服了我,他说JavaScript不是一门玩具语言。我同意撇开成见试一试,于是打开MDN和StackOverflow首次深入学习JavaScript。我对这门简约的语言着了迷,我的同事还教我如何使用工具,例如代码整理工具(linter)和代码合并工具(bundler)[ 译者注:代码压缩工具(minifier)对于生产力和性能来说也至关重要。]。在这几个星期里我恍然大悟,原来我如此喜欢编写JavaScript代码。
但没有一门语言是完美的,由于使用过其他语言,我非常希望JavaScript也可以频繁更新,但在这10年间,ECMAScript 5是唯一的重大更新,它只实现了一小部分特性,完全支持浏览器需要数10年的时间。彼时,即将到来的代号为Harmony的ECMAScript 6(ES6)规范尚未完成,遥遥无期。也许在10年内我能够写一些ECMAScript 6代码吧。我想。
一些实验性的转译器(Transpiler),如谷歌的Traceur,可以将代码从ECMAScript 6转换成ECMAScript 5。它们大多功能非常有限,或难以插入现有的JavaScript构建管道。但是,随后出现的新型转译器 6to5改变了一切。它易于安装,可以很好地集成在现有的工具中,生成的代码可读,于是其像野火般蔓延开来。6to5现在被称作Babel,在标准定稿前就开始为主流受众提供ECMAScript 6的特性。几个月以来,ECMAScript 6无处不在。
出于各种原因,ECMAScript 6已经把社区割裂开来。正如本书所讲,在许多主流浏览器中ECMAScript 6仍未完全实现。当你学习这门语言时,不得不进行的构建步骤足以使人退缩。一些库的文档和示例中有ECMAScript 6的代码,你可能想知道这些库是否可以在ECMAScript 5环境中使用。这令人感到困惑,由于这门语言之前几乎从未改变过,因此许多人对于新特性的加入并没有十分期待,而有一部分人在焦急地等待新功能的到来,并希望所有的这些新功能能放在一起使用在某些情况下,甚至为了使用而使用,不管是否必要。
正当我对JavaScript的使用逐渐熟练时,我感觉再往前走很困难,我不得不学习一门新的语言。那几个月的时间里我感到很糟糕。最后在圣诞节前夕,我开始阅读本书的草稿,我简直爱不释手,在凌晨3点,当参加聚会的每一位成员都已熟睡,而我却理解了ECMAScript 6!
Nicholas是一位非常有天赋的老师。他以直截了当的方式传达深刻的细节,让你能够理解所有这些知识。除了本书之外,他也因创建ESLint而出名,这是一个被下载了数百万次的JavaScript代码分析器。
Nicholas对JavaScript的了解程度很少有人能够企及,所以不要错过吸取新知识的机会。阅读本书,你将对掌握ECMAScript 6充满信心。
Dan Abramov
React核心团队成员及Redux的创造者