介绍

JavaScript核心特性根据 ECMA-262 标准制定。语言的核心特性在标准中被称为ECMAScript,并且是作为一个父集存在于浏览器和NodeJs环境中。当浏览器和NodeJs可通过额外的对象和方法来增加更多的功能,这种核心特性就会被定义为ECMAScript,这就是为什么ECMA-262标准的持续发展对JavaScript作为一个整体能否成功起着至关重要的作用。

在2007年,JavaScript发展处于一个十字路口。Ajax的普及开创了一个新的动态的web应用程序时代,但JavaScript并没有更新因为ECMA-262的第3版是在1999年推出。负责ECMAScript的委员会TC-39为ECMAScript4起草了一个大规范。ECMAScript4是大规模的改变,更改了语言从小到大的部分,包括新的语法、模块、类、经典继承、私有对象成员、可选的类型注释、以及更多。

ECMAScript4改变的部分引起了TC-39的内部形成了分裂,一些成员觉得第4版试图完成的部分太多了。来自Yahoo, Google, 和 Microsoft的领导完成了ECMAScript的下一个版本,该版本一开始被称为ECMAScript 3.1。3.1版本意图是对现有版本循循渐进的改变。

ECMAScript 3.1介绍了非常少的语法变化,反而侧重于property属性,本地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的第5个版本,也就是ECMAScript 5。委员会没有把该版本以ECMAScript 4命名发布是为了避免和之前讨论的ECMAScript 4同名而造成混乱。然后工作开始于ECMAScript Harmony,ECMAScript 6成为这种新的“Harmony”精神的第一个标准。

ECMAScript 6在2015年达到功能完整的状态并被正式命名为ECMAScript 2015(但本文还是叫它为大多数开发者熟悉的ECMAScript 6)。The features vary widely from completely new objects and patterns to syntax changes to new methods on existing objects. 令人兴奋的是ECMAScript 6的所有这些变化是针对开发者所面临的问题。虽然对于采用和实施以达到让开发者所期望的ECMAScript 6的最基本内容还需要些时间,还有很多好的方式可以知道JavaScript的特性是怎样的。

浏览器和NodeJs的兼容性

很多JavaScript环境,如浏览器和NodeJs,正在努力实现ECMAScript。这本书不是尝试划分实现间的不一致,取而代之的是把重点放在规范定义的正确行为上。因此,你的JavaScript环境可能不符合这本书讨论的行为。

这本书适合谁看

这本书的目的是作为一个为那些已经熟悉JavaScript和ECMAScript 5开发者的指南。这本书不适合用来深入理解语言,它只是用来帮助理解ECMAScript 5 和 6之间的区别。特别是,这本书这本书是针对想要了解语言未来的中级到高级的JavaScript开发者(包括浏览器和Node.js环境)。

这本书不适合没写过JavaScript的开发者。你需要一个不错的语言基础才能看懂本书的内容。

概述

第1章:替换 var 的块级别绑定 let 和 const 。

第2章:字符串扩展,包括Strings、Regular Expressions 和模板字符串

第3章:讨论函数的各种变化,包括 arrow,默认参数,其他参数,以及更多。

第4章:对象扩展解释了对象的创建、修改和使用的变化。主题还讨论对象字面量的语法和新的反射方法。

第5章:解构对象和数组。

第6章:介绍新的原始数据类型Symbols,可以用来掩盖(但不隐藏)对象的属性和方法。

第7章:迭代器和生成器扩展允许收集通过强大的方式收集数据。

第8章:类在JavaScript中第一次有正式概念。常常和其他语言的 class 造成混乱,JavaScript添加的 class 语法使开发者更容易使用。

第9章:数组详述了原生数组的改变和新的有趣的方法。

第10章:新的收集方式 Set, WeakSet, Map 和 WeakMap,这些方式通过添加语义,de-duping和专门为JavaScript设计的内存管理以提高数组的效率。

第11章:

第12章:介绍JavaScript正式的reflection API,允许检查对象的粒度级别,即使没有创建对象。

第13章:介绍新的代理对象,允许拦截对象上的每一个操作。代理给开发者提供了对对象前所未有的控制,因此,这种新的交互模式提供了无需的可能。

第14章:介绍模块的格式,这些模块可以取代已经出现了多年的众多的特设模块格式。