基本信息
编辑推荐
√ 2015年6月新发布的标准,被全球IT企业及前端开发者广泛拥护、支持。
√ 国内绝无仅有的ES6教程,由知名博主、前端新知布道者阮一峰老师执笔。
√ 本书紧跟业界实践,透彻解读新增特性、语法,代码示例简洁易用。
√ 把握趋势,覆盖ES7,指导JavaScript开发者提升功力,了解语言发展动向。
内容简介
作译者
目录
1.1 ECMAScript和JavaScript的关系 001
1.2 ECMAScript的历史 001
1.3 部署进度 002
1.4 Babel转码器 003
命令行环境 004
浏览器环境 005
Node.js环境 005
在线转换 006
1.5 Traceur转码器 006
直接插入网页 006
在线转换 007
命令行转换 008
Node.js环境的用法 008
1.6 ECMAScript 7 009
第2章 let和const命令 010
2.1 let命令 010
基本用法 010
不存在变量提升 011
暂时性死区 011
前言
那个项目的最后一章就是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 上公开后,已经得到了大量的勘误,但是本书的不如人意之处恐怕还是有不少。
欢迎大家访问本书的项目主页(https://github.com/ruanyf/es6tutorial),提出意见,以及提交pull request。这些都会包括在本书的下一个版本中。
阮一峰
2014 年6 月4 日,写于上海
序言
为什么我们要关心标准
“ECMAScript 是 JavaScript 语言的国际标准,JavaScript 是 ECMAScript 的实现。”本书第 1 章的这句话已经清楚地告诉我们,这是一本不实用的书。我们学习了这本书,并不意味着掌握了一项实用的技术,而只是掌握了一个未来可能会发布的技术标准。而标准,有可能在将来被实现,变成主流,也有可能就仅仅是一个标准,没有人真的去实践它。如果你再了解一下第 1 章里面介绍的 ECMAScript 4.0 草案的血泪史,或者回顾一下曾经红极一时的XHTML,就更容易明白这一点了。
那我们为什么不直接忽略标准,拥抱实践就好呢?来,我们一起翻开小学课本,跟我念:柏林已经来了命令,阿尔萨斯和洛林的学校只许教德语了……(《最后一课》)当统治者宣布一门言成为“标准”的时候,不管是在现实生活还是技术领域里面,往往就意味着所有其他的选项自动消失了,我们只能去学习“统治者”的语言。幸运的是,在技术领域里面,跳出来争取对技术的影响力和主导权,不但不违反任何一国的宪法,往往还是被鼓励的。
因此,技术的未来发展,是我们可以去发出声音,去影响,乃至于去引领的。而要做到这些,我们需要搞清楚,ECMA 和各大互联网巨头们,他们正在做什么,正在把技术往哪里引领;他们引领的方向,到底是对所有人有利的,还是只是对某些公司有利;我们中国的开发者和中国的公司,要怎么加入到这些标准的制订过程中,把标准带到更好的方向上。
最近几年,越来越多的中国公司加入到各种国际标准组织中,参与到各种标准(尤其是在东亚文字处理、排版、输入法相关的领域)制订过程中,发出了中国技术人员的声音。随着中国国力的增强,中国开发厂商和技术人员的影响力的发展壮大,可以预见,不久的将来,中国工程师也许会深入参与到 ECMAScript 7 和 HTML6 这样的技术标准的制订过程里面,跟各国的专家一起探讨,我们中国的开发者不喜欢这样,更喜欢那样。在那些标准大会上,我们的发言权将来自于我们对标准的深入理解、我们对技术发展的独到眼光和我们建设起来的技术影响力。
作为一个 JS 开发者,实话说,对于 ECMAScript 6 里面的很多内容(比如 let 语句),我并不完全认同。但是很遗憾,这个标准的制定过程没我们什么事。但是如果我们从现在开始关注国际标准,翻译标准文档,让更多人了解标准,更多公司加入标准组织、参与标准制订,也许未来的中国技术圈不但会是很多人的一个圈子,还会是很有影响力的一个圈子。
“我们说的话,让世界都认真听话。”(S.H.E,《中国话》)
——腾讯驻 W3C 顾问委员会代表 黄希彤(stone)
黄希彤(网名 emu),Web 性能优化(WPO)领域实践者,信息无障碍领域推动者。腾讯 Web 前端专家,腾讯驻 W3C 顾问委员会代表,腾讯 QQ 空间技术总监。
推荐序 2
因为一件往事,我现在轻易不敢给别人写序或者书评。那天我在想,如果我要给这本书写序,是不是应该先把这本书拿给贺老(hax)看看。后来呢,我到阮一峰老师的 GitHub 上看了一看,发现这本书有 605 个 star,若干个已解决和未解决的 issue,所以我就放心了。开源真是好啊!
这本书是关于 ES6 的,我对 ES6 并没有特别系统的研究,但是也在工作中使用了一部分 ES6 的特性,使用得最多的是 Promise,其他的特性只是研究,很少使用,主要是因为本身支持 ES6的环境和工具有限。浏览器就不说了,现在的前端工程师在一些产品中能够抛弃 IE6 已经是很幸福的事情了,但是即使是 IE8,离真正的 ES6 也还很遥远。在其他领域,比如手机游戏领域,cocos2d-js v3.0 使用的脚本引擎是 SpiderMonkey v28,因此情况要好很多,但是周边的一些工具,比如 closure compiler 不能很好地压缩和优化 ES6,当然你可以采用转换工具先将 ES6 转成 ES5,然后再做压缩和优化,但是这多出来的一步造成更多出错的可能,而且和享受 ES6 的语法糖的快乐相比,开销有点大——如果无论如何需要再转一步,那么为什么我们不干脆考虑TypeScript 或者其他选择呢?
为什么会选择使用 ES6 的 Promise,那是因为 Promise 算是比较好解决异步嵌套问题的方案,另外 Promise 本身在低版本下也有比较好的 polyfill 实现(https://github.com/jakearchibald/es6-promise),对于我和一些前端工程师来说,是十分乐意为将来去写一些能够向前兼容的符合标准的代码的。
目前这个阶段,前端学习 ES6,并不意味着能够很快将 ES6 的好处带到工作中,因为我们毕竟还受到现在的浏览器环境的制约。但是,即使单纯从学习一门编程语言的核心 API 的角度来说,ES6 也是值得学习的。它的很多新特性,真正涉及现代编程语言概念中很流行的部分,不管是解构赋值还是迭代器或者 yield,都是超棒超赞的思想,不但易于理解,也能节省很多键盘操作,而另一些诸如 const、作用域之类的设定,则让脚本引擎代替程序员人肉检查做更多的事情,让我们最终上线的代码变得更加安全和更加优美。
不管怎样,ES6 代表着一种前端的未来,这种未来,无疑能让前端工程师们工作得更高效,也更有乐趣。更进一步说,ECMAScript 还是开放的标准,对这门语言的新特性,有什么好的想法,都是有机会提交为标准的,也就是说,前端程序员的未来,是由我们前端程序员自己来创造的,还有什么是比自由更加美好的呢?所以,为了未来,加油!
——360 奇舞团团长月影
吴亮(网名月影),先后在微软亚洲研究院做过访问学生,在金蝶软件有限公司担任过核心开发工程师、设计师和项目经理,在百度电子商务事业部担任过 Web 开发项目经理。现任奇虎 360高级技术经理,360 前端团队奇舞团负责人。多年来致力于 JavaScript 技术和 Web 标准的推广,活跃于国内各技术社区,现为 w3ctech 顾问。
媒体评论
为什么我们要关心标准
“ECMAScript 是 JavaScript 语言的国际标准,JavaScript 是 ECMAScript 的实现。”
本书第 1 章的这句话已经清楚地告诉我们,这是一本不实用的书。我们学习了这本书,并不意味着掌握了一项实用的技术,而只是掌握了一个未来可能会发布的技术标准。而标准,有可能在将来被实现,变成主流,也有可能就仅仅是一个标准,没有人真的去实践它。如果你再了解一下第 1 章里面介绍的 ECMAScript 4.0 草案的血泪史,或者回顾一下曾经红极一时的XHTML,就更容易明白这一点了。
那我们为什么不直接忽略标准,拥抱实践就好呢?来,我们一起翻开小学课本,跟我念:柏林已经来了命令,阿尔萨斯和洛林的学校只许教德语了……(《最后一课》)当统治者宣布一门语言成为“标准”的时候,不管是在现实生活还是技术领域里面,往往就意味着所有其他的选项自动消失了,我们只能去学习“统治者”的语言。幸运的是,在技术领域里面,跳出来争取对技术的影响力和主导权,不但不违反任何一国的宪法,往往还是被鼓励的。
因此,技术的未来发展,是我们可以去发出声音,去影响,乃至于去引领的。而要做到这些,我们需要搞清楚,ECMA 和各大互联网巨头们,他们正在做什么,正在把技术往哪里引领;他们引领的方向,到底是对所有人有利的,还是只是对某些公司有利;我们中国的开发者和中国的公司,要怎么加入到这些标准的制订过程中,把标准带到更好的方向上。
最近几年,越来越多的中国公司加入到各种国际标准组织中,参与到各种标准(尤其是在东亚文字处理、排版、输入法相关的领域)制订过程中,发出了中国技术人员的声音。随着中国国力的增强,中国开发厂商和技术人员的影响力的发展壮大,可以预见,不久的将来,中国工程师也许会深入参与到 ECMAScript 7 和 HTML6 这样的技术标准的制订过程里面,跟各国的专家一起探讨,我们中国的开发者不喜欢这样,更喜欢那样。在那些标准大会上,我们的发言权将来自于我们对标准的深入理解、我们对技术发展的独到眼光和我们建设起来的技术影响力。
作为一个 JS 开发者,实话说,对于 ECMAScript 6 里面的很多内容(比如 let 语句),我并不完全认同。但是很遗憾,这个标准的制定过程没我们什么事。但是如果我们从现在开始关注国际标准,翻译标准文档,让更多人了解标准,更多公司加入标准组织、参与标准制订,也许未来的中国技术圈不但会是很多人的一个圈子,还会是很有影响力的一个圈子。
“我们说的话,让世界都认真听话。”(S.H.E,《中国话》)
——腾讯驻 W3C 顾问委员会代表 黄希彤(stone)
黄希彤(网名 emu),Web 性能优化(WPO)领域实践者,信息无障碍领域推动者。腾讯 Web 前端专家,腾讯驻 W3C 顾问委员会代表,腾讯 QQ 空间技术总监。
推荐序 2
因为一件往事,我现在轻易不敢给别人写序或者书评。那天我在想,如果我要给这本书写序,是不是应该先把这本书拿给贺老(hax)看看。后来呢,我到阮一峰老师的 GitHub 上看了一看,发现这本书有 605 个 star,若干个已解决和未解决的 issue,所以我就放心了。开源真是好啊!
这本书是关于 ES6 的,我对 ES6 并没有特别系统的研究,但是也在工作中使用了一部分 ES6 的特性,使用得最多的是 Promise,其他的特性只是研究,很少使用,主要是因为本身支持 ES6的环境和工具有限。浏览器就不说了,现在的前端工程师在一些产品中能够抛弃 IE6 已经是很幸福的事情了,但是即使是 IE8,离真正的 ES6 也还很遥远。在其他领域,比如手机游戏领域,cocos2d-js
v3.0 使用的脚本引擎是 SpiderMonkey
v28,因此情况要好很多,但是周边的一些工具,比如 closure compiler 不能很好地压缩和优化 ES6,当然你可以采用转换工具先将 ES6 转成 ES5,然后再做压缩和优化,但是这多出来的一步造成更多出错的可能,而且和享受 ES6 的语法糖的快乐相比,开销有点大——如果无论如何需要再转一步,那么为什么我们不干脆考虑TypeScript 或者其他选择呢?
为什么会选择使用 ES6 的 Promise,那是因为 Promise 算是比较好解决异步嵌套问题的方案,另外 Promise 本身在低版本下也有比较好的 polyfill 实现(https://github.com/jakearchibald/es6-promise),对于我和一些前端工程师来说,是十分乐意为将来去写一些能够向前兼容的符合标准的代码的。
目前这个阶段,前端学习 ES6,并不意味着能够很快将 ES6 的好处带到工作中,因为我们毕竟还受到现在的浏览器环境的制约。但是,即使单纯从学习一门编程语言的核心 API 的角度来说,ES6 也是值得学习的。它的很多新特性,真正涉及现代编程语言概念中很流行的部分,不管是解构赋值还是迭代器或者 yield,都是超棒超赞的思想,不但易于理解,也能节省很多键盘操作,而另一些诸如 const、作用域之类的设定,则让脚本引擎代替程序员人肉检查做更多的事情,让我们最终上线的代码变得更加安全和更加优美。
不管怎样,ES6 代表着一种前端的未来,这种未来,无疑能让前端工程师们工作得更高效,也更有乐趣。更进一步说,ECMAScript 还是开放的标准,对这门语言的新特性,有什么好的想法,都是有机会提交为标准的,也就是说,前端程序员的未来,是由我们前端程序员自己来创造的,还有什么是比自由更加美好的呢?所以,为了未来,加油!
——360 奇舞团团长月影