《Understanding ECMAScript 6》——Introduction

《理解 ECMAScript 6》——简介

JavaScript的核心语言特性是在一个叫做ECMA-262的标准中定义的。在这个标准中定义的语言叫做ECMAScript。你所知道的在浏览器中和Node.js中的JavaScript其实是ECMAScript的父集。浏览器和Node.js通过增加对象和方法来增加更多的功能,不过语言的核心还是在ECMAScript中定义的。ECMA-262标准的不断发展对作为整体的JavaScript的成功至关重要,而这本书包含了这个语言近来最重要的更新——ECMAScript6的诸多改变。

一、走向 ECMAScript 6

2007年,JavaScript处在一个发展的关键时刻。当饱受欢迎的Ajax引领着动态Web应用的新时代时,JavaScript自从1999年第三版的ECMA-262发布后一直没有变化。作为负责推动ECMAScript发展进程的委员会,TC-39为 ECMAScript 4 制定了大量的规范草案。新的特性包括新语法、模块、类、类的继承、对象私有变量,以及可选类型注释等等。

ECMAScript 4中大量的改动造成了TC-39内部的分歧,一些成员觉得第四版想要做的太多了。来自雅虎、谷歌和微软的核心成员为下一版本的ECMAScirpt给出了一个替代性的提议,这个版本最初叫做 ECMAScript 3.1。“3.1”主要是为了表明它只是为现有标准增加一些功能的版本。

ECMAScirpt 3.1 提供了非常少的语法改变,相反,它主要专注于属性,原生JSON对象的支持和给现有的对象增加方法。虽然起初尝试着去整合ECMAScript 3.1和ECMAScript 4,但是由于两方阵营对语言的发展的意见无法达成一致,这个尝试最终失败了。

到了2008年的时候,Brendan Eich,JavaScript的创造者,宣布TC-39将会专注于制定ECMAScript 3.1标准。他们会在下个版本的ECMAScript标准化前搁置ECMAScript 4中主要语法和特性的修改,并且委员会中所有成员都会努力将ECMAScript 3.1和ECMAScript 4中最精华的部分融合到一个名为“ECMAScript Harmony(和谐)”的版本中。

最终,ECMAScript3.1成为了ECMA-262的第5个版本的标准,也被称为ECMAScript 5。委员会为了避免和现有已经搁置的规范同名,没有发布ECMAScript 4标准,随后工作便专向ECMAScript Harmony,ECMAScript 6成为了在“和谐”精神下的第一个发布的标准。

ECMAScript 6(简称ES6)的所有特性在2015年的时候完全完成,并且被正式赋予了“ECMAscript 2015”的名字(不过在本书中依然还会用ECMAScript 6来指代它,因为这个名字对开发者最为熟悉)。ES6的语言特性有着广泛的变动,如全新的对象和模式,语法本身,现有对象的新方法。ECMAScript 6中最激动人心的是,它所有的改变都是为了解决开发者们实际遇到的问题。

二、关于这本书

良好地理解ECMAScript 6特性是所有JavaScript开发者们前行重要的一步。包含在ECMAScript 6中的语言特性代表了在可预见的未来搭建JavaScript应用的基础,这也正是这本书所要讲述的。我希望你能通过阅读这本书学习ECMAScript 6的新特性,并在在你需要的时候开始使用它们。

浏览器和Node.js的兼容性

很多的JavaScript环境,如网页浏览器和Node.js,都正在积极地努力实现ECMAScript 6.这本书不会去阐述各个环境实现不完全的兼容性问题,而专注阐明于那些在规范中定义为正确的行为。因此,你的JavaScript环境的行为可能和这本书中描述的不同。

本书适用人群

这本书面向那些熟悉JavaScript和ECMAScript5的读者。如果要对语言有深层次的认识的话不一定要使用这本书,这本书的目的是帮助你理解ECMAScript5和ECMAScript6之间的不同。更准确地说,这本书的目标读者是那些在浏览器或者Node.js环境中编程并且想学习语言最新进展的中高级JavaScript开发者。

这本书不适合那些从未写过JavaScript的初学者。要理解这本书,你需要拥有对语言有一个很好的基本理解。

概览

这本书十三章中的每一章各包含了ECMAScript 6中的一个方面。为了让你更加深刻地理解这些改变,很多章节都从讨论ECMAScript 6 想要解决的问题开始,并且所有章节都包含了代码示例来帮助你学习新的语法和概念。

第1章:块绑定是怎样工作的 讨论用以替代varletconst

第2章:字符串和正则表达式 包含了新增加的字符串操控和检查功能,还有模板字符串的介绍。

第3章:ECMAScript 6中的函数 讨论了有关函数的一些变动,包含了箭头函数形式(arrow function form)、默认值参数(default parameters)、剩余参数(rest parameters)等等。

第4章:对象函数的扩展 介绍了对象创建,修改,使用方式的变动。讨论话题包含对象字面量语法的改变和新的反射方法。

第5章:为更简单的数据访问解构 介绍了对象和数组的解构(destructuring),它让你能够用简明的语法解构对象和数组

第6章:symbols和symbol属性 介绍了symbols的概念,这是定义属性的一个全新的方法。symbols是一个新的原始类型,它可以用来遮掩(obscure)(但不是隐藏(hide))对象属性和方法。

第7章:Sets和Maps 详细阐述了全新的集合类型:SetWeakSetMapWeakMap。这些类型通过增加语义,删除重复内容和特别为JavaScript设计的内存管理的方式扩展了数组。

第8章:迭代器和生成器 讨论了语言中新增的迭代器和生成器。这些特性让你用有效的方式处理数据,而这在之前版本的JavaScript中难以做到

第9章:介绍JavaScript中的类 介绍了JavaScript中第一个正式的“类”的概念。那些其他语言转到JavaScript的人常常对此(ES5及更早的JavaScript中没有“类”)感到困惑,而JavaScript类的语法的加入让JavaScript对其他人和爱好者们更加简明而友好。

第10章:改进功能的数组 详述了原生数组的变动和在JavaScript中使用它们的全新方式

第11章:Promises和异步编程 介绍了作为这个语言一部分的promises。promises作为基础特性已经被第三方类库广泛地支持,而ECMAScript 6开始将它规范化并默认地支持了它。

第12章:代理和反射API 介绍了规范化的JavaScript反射(Reflection)API和新的代理对象,代理对象能让你拦截对一个对象的所有操作。代理让开发者拥有对对象史无前例的控制,也因此让定义全新交互模式有了无限可能。

第13章:用模块封装代码 详细阐述了JavaScript官方的模块形式,目的是为了让这些模块能取代以前出现各种各样的模块定义形式

附录A:一些细小的ECMAScript 6变动 包含了其他在ECMAScript 6中的变动,通常是那些你不常使用的或者那些不适合放到前几章的主要话题中的变动。

附录B:理解ECMAScript 7(2016) 阐述了应用到ECMAScript 7标准中的两个新增项,它们不拥有ECMAScript 6那样有影响力。

使用约定

本书将使用如下的排版约定:

  • 斜体 表示新的术语
  • Constant width 表示一段代码或者文件名

此外,长代码示例将会放在固定宽度的代码块中,如

function doSomething() {
    // empty
}

在一个代码块中, 在 console.log() 右边的注释代表代码运行时你将在浏览器或者Node.js控制台看到的输出结果,比如:

console.log("Hi");      // "Hi"

如果一个代码块中的某一行抛出了错误,会在该行代码的右边看到如下的注释:

doSomething();          // error!

帮助与支持

你可以通过访问 https://github.com/nzakas/understandinges6 提出问题,给出修正的建议,反对书中的内容

你读了本书后如果有任何疑问,请给我的邮件列表发送消息 http://groups.google.com/group/zakasbooks.

三、感谢

感谢 Jennifer Griffith-Delgado, Alison Law,和No Starch出版社的所有人对这本书的支持和帮助。他们对我在生病期间缓慢的写作速度给予了理解和耐心,这是我永远也不会忘记的。

I我很感谢作为技术编辑 Juriy Zaytsev 的关注,还有 Axel Rauschmayer 博士的反馈和几段谈话,这些谈话让我对书中所讨论的概念的理解更加清晰。

感谢在Github上为这本书提交修改的每一个人:ShMcK, Ronen Elster, Rick Waldron, blacktail, Paul Salaets, Lonniebiz, Igor Skuhar, jakub-g, David Chang, Kevin Sweeney, Kyle Simpson, Peter Bakondy, Philip Borisov, Shaun Hickson, Steven Foote, kavun, Dan Kielp, Darren Huskie, Jakub Narębski, Jamund Ferguson, Josh Lubaway, Marián Rusnák, Nikolas Poniros, Robin Pokorný, Roman Lo, Yang Su, alexyans, robertd, 404, Aaron Dandy, AbdulFattah Popoola, Adam Richeimer, Ahmad Ali, Aleksandar Djindjic, Arjunkumar, Ben Regenspan, Carlo Costantini, Dmitri Suvorov, Kyle Pollock, Mallory, Erik Sundahl, Ethan Brown, Eugene Zubarev, Francesco Pongiluppi, Jake Champion, Jeremy Caney, Joe Eames, Juriy Zaytsev, Kale Worsley, Kevin Lozandier, Lewis Ellis, Mohsen Azimi, Navaneeth Kesavan, Nick Bottomley, Niels Dequeker, Pahlevi Fikri Auliya, Prayag Verma, Raj Anand, Ross Gerbasi, Roy Ling, Sarbbottam Bandyopadhyay和Shidhin.

还有,感谢每一位在Patreon: Casey Visco上支持这本书的人。


原文地址:Understanding ECMAScript 6: Introduction

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值