新書推薦:
《
古今“书画同源”论辨——中国书法与中国绘画的关系问题兼中国画笔墨研究
》
售價:HK$
135.7
《
《日本文学史序说》讲演录
》
售價:HK$
74.8
《
无尽的海洋:美国海事探险与大众文化(1815—1860)
》
售價:HK$
102.4
《
治盗之道:清代盗律的古今之辨
》
售價:HK$
125.4
《
甲骨文丛书·剑桥世界暴力史(第一卷):史前和古代世界(套装全2册)
》
售價:HK$
210.6
《
甲骨文丛书·中华早期帝国:秦汉史的重估
》
售價:HK$
300.2
《
欲望与家庭小说
》
售價:HK$
101.2
《
惜华年(全两册)
》
售價:HK$
72.2
編輯推薦:
横跨ES201520162017新标,抢占JavaScript制高点
由千万级名博、布道引领无数前端入行的阮一峰执笔
来自BAT一线实践,精彩案例透彻解读新标|保留语法
新标首著,凝结多年研究心得,剖析ES理解应用难题
內容簡介:
ES6是下一代JavaScript语言标准的统称,每年6月发布一次修订版,迄今为止已经发布了3个版本,分别是ES2015、ES2016、ES2017。本书根据ES2017标准,详尽介绍了所有新增的语法,对基本概念、设计目的和用法进行了清晰的讲解,给出了大量简单易懂的示例。本书为中级难度,适合那些已经对JavaScript语言有一定了解的读者,可以作为学习这门语言*进展的工具书,也可以作为参考手册供大家随时查阅新语法。第3版增加了超过30%的内容,完全覆盖了ES2017标准,相比第2版介绍了更多的语法点,还调整了原有章节的文字表达,充实了示例,论述更准确,更易懂易学。
關於作者:
阮一峰,资深JavaScript 语言专家,知名技术博客作者,专注于网站开发技术十余年。畅销书《黑客与画家》、《软件随想录》的译者,现就职于蚂蚁金服集团。
目錄 :
目录
第1章ECMAScript 6简介1
1.1ECMAScript和JavaScript的关系1
1.2ES6与ECMAScript 2015的关系1
1.3语法提案的批准流程2
1.4ECMAScript的历史3
1.5部署进度4
1.6Babel 转码器4
1.6.1配置文件.babelrc5
1.6.2命令行转码babel-cli6
1.6.3babel-node7
1.6.4babel-register8
1.6.5babel-core8
1.6.6babel-polyfill9
1.6.7浏览器环境10
1.6.8在线转换10
1.6.9与其他工具的配合11
1.7Traceur转码器11
1.7.1直接插入网页12
1.7.2在线转换13
1.7.3命令行转换14
1.7.4Node环境的用法15
第2章let和const命令17
2.1let 命令17
2.1.1基本用法17
2.1.2不存在变量提升19
2.1.3暂时性死区19
2.1.4不允许重复声明21
2.2块级作用域22
2.2.1为什么需要块级作用域22
2.2.2ES6的块级作用域23
2.2.3块级作用域与函数声明24
2.2.4do表达式27
2.3const命令28
2.3.1基本用法28
2.3.2本质29
2.3.3ES6声明变量的6种方法30
2.4顶层对象的属性30
2.5global对象31
第3章变量的解构赋值33
3.1数组的解构赋值33
3.1.1基本用法33
3.1.2默认值35
3.2对象的解构赋值37
3.3字符串的解构赋值41
3.4数值和布尔值的解构赋值41
3.5函数参数的解构赋值42
3.6圆括号问题43
3.6.1不能使用圆括号的情况43
3.6.2可以使用圆括号的情况44
3.7用途44
第4章字符串的扩展49
4.1字符的Unicode表示法49
4.2codePointAt50
4.3String.fromCodePoint52
4.4字符串的遍历器接口52
4.5at53
4.6normalize53
4.7includes、startsWith、endsWith54
4.8repeat55
4.9padStart、padEnd56
4.10模板字符串57
4.11实例:模板编译60
4.12标签模板62
4.13String.raw67
4.14模板字符串的限制68
第5章正则的扩展71
5.1RegExp构造函数71
5.2字符串的正则方法72
5.3u修饰符72
5.4y修饰符74
5.5sticky属性77
5.6flags属性77
5.7s修饰符:dotAll模式78
5.8后行断言79
5.9Unicode属性类80
5.10具名组匹配81
5.10.1简介81
5.10.2解构赋值和替换82
5.10.3引用83
第6章数值的扩展85
6.1二进制和八进制表示法85
6.2Number.isFinite、Number.isNaN86
6.3Number.parseInt、Number.parseFloat87
6.4Number.isInteger88
6.5Number.EPSILON88
6.6安全整数和Number.isSafeInteger89
6.7Math对象的扩展92
6.7.1Math.trunc92
6.7.2Math.sign92
6.7.3Math.cbrt93
6.7.4Math.clz3294
6.7.5Math.imul95
6.7.6Math.fround95
6.7.7Math.hypot96
6.7.8对数方法96
6.7.9双曲函数方法98
6.8Math.signbit98
6.9指数运算符99
6.10Integer数据类型99
6.10.1简介99
6.10.2运算100
第7章函数的扩展103
7.1函数参数的默认值103
7.1.1基本用法103
7.1.2与解构赋值默认值结合使用105
7.1.3参数默认值的位置107
7.1.4函数的length属性108
7.1.5作用域108
7.1.6应用111
7.2rest参数112
7.3严格模式113
7.4name属性115
7.5箭头函数116
7.5.1基本用法116
7.5.2注意事项118
7.5.3嵌套的箭头函数121
7.6绑定this123
7.7尾调用优化124
7.7.1什么是尾调用124
7.7.2尾调用优化125
7.7.3尾递归126
7.7.4递归函数的改写128
7.7.5严格模式129
7.7.6尾递归优化的实现129
7.8函数参数的尾逗号132
第8章数组的扩展133
8.1扩展运算符133
8.1.1含义133
8.1.2替代数组的apply方法134
8.1.3扩展运算符的应用136
8.2Array.from139
8.3Array.of142
8.4数组实例的copyWithin143
8.5数组实例的find和findIndex144
8.6数组实例的fill145
8.7数组实例的entries、keys和values145
8.8数组实例的includes146
8.9数组的空位147
第9章对象的扩展151
9.1属性的简洁表示法151
9.2属性名表达式154
9.3方法的name属性156
9.4Object.is157
9.5Object.assign158
9.5.1基本用法158
9.5.2注意点160
9.5.3常见用途161
9.6属性的可枚举性163
9.7属性的遍历165
9.8__proto__ 属性、Object.setPrototypeOf、Object.getPrototypeOf166
9.8.1__proto__ 属性166
9.8.2Object.setPrototypeOf167
9.8.3Object.getPrototypeOf168
9.9Object.keys、Object.values、Object.entries169
9.9.1Object.keys169
9.9.2Object.values170
9.9.3Object.entries171
9.10对象的扩展运算符173
9.11Object.getOwnPropertyDescriptors177
9.12Null传导运算符181
第10章Symbol183
10.1概述183
10.2作为属性名的Symbol185
10.3实例:消除魔术字符串188
10.4属性名的遍历189
10.5Symbol.for、Symbol.keyFor191
10.6实例:模块的Singleton模式192
10.7内置的Symbol值194
10.7.1Symbol.hasInstance194
10.7.2Symbol.isConcatSpreadable195
10.7.3Symbol.species196
10.7.4Symbol.match197
10.7.5Symbol.replace197
10.7.6Symbol.search198
10.7.7Symbol.split198
10.7.8Symbol.iterator199
10.7.9Symbol.toPrimitive200
10.7.10Symbol.toStringTag201
10.7.11Symbol.unscopables202
第11章Set和Map数据结构205
11.1Set205
11.1.1基本用法205
11.1.2Set实例的属性和方法207
11.1.3遍历操作208
11.2WeakSet212
11.2.1含义212
11.2.2语法212
11.3Map214
11.3.1含义和基本用法214
11.3.2实例的属性和操作方法218
11.3.3遍历方法220
11.3.4与其他数据结构的互相转换222
11.4WeakMap225
11.4.1含义225
11.4.2WeakMap的语法227
11.4.3WeakMap示例228
11.4.4WeakMap的用途229
第12章Proxy233
12.1概述233
12.2Proxy实例的方法237
12.2.1get237
12.2.2set241
12.2.3apply243
12.2.4has244
12.2.5construct246
12.2.6deleteProperty247
12.2.7defineProperty248
12.2.8getOwnPropertyDescriptor248
12.2.9getPrototypeOf249
12.2.10isExtensible249
12.2.11ownKeys250
12.2.12preventExtensions254
12.2.13setPrototypeOf255
12.3Proxy.revocable255
12.4this问题256
12.5实例:Web服务的客户端258
第13章Reflect259
13.1概述259
13.2静态方法261
13.2.1Reflect.gettarget, name, receiver262
13.2.2Reflect.settarget, name, value, receiver263
13.2.3Reflect.hasobj, name264
13.2.4Reflect.deletePropertyobj, name265
13.2.5Reflect.constructtarget, args265
13.2.6Reflect.getPrototypeOfobj265
13.2.7Reflect.setPrototypeOfobj, newProto266
13.2.8Reflect.applyfunc, thisArg, args267
13.2.9Reflect.definePropertytarget, propertyKey, attributes267
13.2.10Reflect.getOwnPropertyDescriptor target, propertyKey268
13.2.11Reflect.isExtensible target268
13.2.12Reflect.preventExtensionstarget269
13.2.13Reflect.ownKeys target269
13.3实例:使用Proxy实现观察者模式270
第14章Promise对象273
14.1Promise的含义273
14.2基本用法274
14.3Promise.prototype.then278
14.4Promise.prototype.catch279
14.5Promise.all285
14.6Promise.race287
14.7Promise.resolve288
14.8Promise.reject290
14.9两个有用的附加方法291
14.9.1done291
14.9.2finally292
14.10应用292
14.10.1加载图片292
14.10.2Generator函数与Promise的结合293
14.11Promise.try294
第15章Iterator和for...of循环297
15.1Iterator(遍历器)的概念297
15.2默认Iterator接口300
15.3调用Iterator接口的场合305
15.4字符串的Iterator接口307
15.5Iterator接口与Generator函数308
15.6遍历器对象的return、throw309
15.7for...of循环310
15.7.1数组310
15.7.2Set和Map结构311
15.7.3计算生成的数据结构312
15.7.4类似数组的对象313
15.7.5对象314
15.7.6与其他遍历语法的比较315
第16章Generator函数的语法317
16.1简介317
16.1.1基本概念317
16.1.2yield表达式319
16.1.3与Iterator接口的关系322
16.2next方法的参数323
16.3for...of循环325
16.4Generator.prototype.throw328
16.5Generator.prototype.return334
16.6yield*表达式335
16.7作为对象属1
內容試閱 :
第3版前言
4年前,当我开始写这本书的时候,ECMAScript 5.1版刚刚开始普及,最流行的框架还是jQuery。ES6看上去就像一个遥远的蓝图,无人知道何时会实现。
仅仅4年,ES6已经经历了ES2015、ES2016、ES2017这3个版本的迭代,各种实现的支持度已经超过90%,不仅可以实现网页的编写,还可以实现服务器脚本、手机App和桌面应用的编写。程序员们完全接受了这个标准,甚至大量使用尚未标准化的新语法。JavaScript语言就像一列高铁,以令人眩晕的速度向前冲刺。
互联网行业的蓬勃兴旺造就了ES6的成功,也使得这本教程不断更新,越写越厚。第2版问世18个月之后,不得不推出第3版。
第3版新增了超过30%的内容,完全覆盖了ES2017标准(第2版只做到覆盖 ES2015标准),并且对所有章节都进行了修订,文字表达更准确易懂,示例更丰富。对读者来说,这个版本更容易学习,更有参考价值。
这4年来,我对ES6的理解和所有的学习笔记,都浓缩在这本教程里面。那些我自己感到最困难的地方,书中都做出了详细讲解,给出了细致的示例,我相信这也是其他国内学习者所需要的。
这本教程当然也包含了些许局限,以及细致检查之后仍然疏漏的各种错误。一旦发现,我会第一时间更正。读者可以到官方仓库github.comruanyfes6tutorial中查看勘误。
我在微博上曾经说过一段话,就把它放在这里作为结束吧。
我水平其实不高,只是好奇心重,从没想到这么多人会关注。希望不要让大家失望,未来做一块垫脚石,为需要的朋友提供帮助,为技术的推广和发展做出力所能及的贡献。
阮一峰
2017年8月1日,写于杭州
第1版前言
2012年年底,我开始动手做一个开源项目《JavaScript标准参考教程》(github.comruanyf 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上公开后已经得到了大量的勘误,但是本书的不尽如人意之处恐怕还有不少。
欢迎大家访问本书的项目主页(github.comruanyfes6tutorial),提出意见,提交pull request。这些都会包括在本书的下一个版本中。
阮一峰
2014年6月4日,写于上海