本书是关于 ECMAScript 6(官方名称为 ECMAScript 2015)的,它是 JavaScript 的新版本。
为了理解本书,您应该已经了解 JavaScript。如果您不了解:我的另一本书“Speaking JavaScript”在线免费,并向程序员教授所有 JavaScript(包括 ECMAScript 5)。
本书从三个详细程度介绍了 ES6
其他需要了解的事项
我在 ES6 功能实现之前很久就开始写这本书了,这需要进行大量的研究。必要的资料来源是
ECMAScript 5 引入了语言模式:严格模式 通过更改其语义、执行更多检查和抛出更多异常,使 JavaScript 成为一种更简洁的语言。有关更多信息,请参阅“Speaking JavaScript”中的“严格模式”一节。旧版/默认模式称为非严格模式 或 草率模式。
严格模式通过以下行启用(在 ES5 之前的 ECMAScript 版本中不起作用)
如果将此行放在文件的开头,则其中的所有代码都将处于严格模式。如果将此行设为函数的第一行,则只有该函数处于严格模式。
使用指令启用严格模式对用户不太友好,这也是严格模式在 ES5 中不像应有的那样流行的原因之一。但是,ES6 模块和类隐式地处于严格模式。鉴于大多数 ES6 代码都将存在于模块中,因此严格模式实际上成为 ES6 的默认模式。
术语协议 在计算中有多种含义。在编程语言和 API 设计的上下文中,我按如下方式使用它
协议定义接口(方法和/或函数的签名)和使用规则。
其想法是指定如何执行服务。然后任何人都可以执行服务,任何人都可以请求服务,并且可以保证它们可以很好地协同工作。
请注意,此处给出的定义与将协议视为接口(例如,Objective C 所做的)不同,因为此定义包含规则。
给定方法调用 obj.m(···)
,obj
是方法调用的接收器,并且可以通过方法内部的 this
进行访问。
函数的(类型)签名描述了如何调用函数,其输入和输出是什么。我在本书中使用了 Microsoft TypeScript 和 Facebook Flow 建立的语法。签名的示例
您可以看到 parseInt()
需要一个字符串和一个数字,并返回一个数字。如果参数的类型很明显,我通常会省略类型注释。
ES6 语言规范使用内部插槽 来存储内部数据。在规范中,内部插槽的访问方式就像它们是名称在方括号中的属性一样
有两件事使它们与属性不同
[[Prototype]]
。该插槽的值不能通过 JavaScript 直接读取,但是您可以使用 Object.getPrototypeOf()
来读取。如何精确存储内部插槽尚无定论。有些甚至在实际的 JavaScript 实现中可能不存在。
ECMAScript 规范使用称为环境 的数据结构来存储作用域的变量。环境基本上是一个将变量名映射到值的字典。绑定 是环境中的一个条目,是变量的存储空间。
破坏性操作(方法,函数)会修改其参数或其接收器。例如,push()
修改其接收器 arr
相反,concat()
创建一个新的数组,并且不更改其接收器 arr
类 C
的 API 通常记录如下
C
构造函数C
方法C.prototype
方法在英语中,我将 JavaScript 术语大写如下
String
:其成员是对象,String
的实例。string
:其成员是原始值,字符串。map()
区分开。GitHub 上的几个存储库包含本书中显示的代码
async-examples
babel-on-node
demo_promise
generator-examples
node-es6-demo
promise-examples
webpack-es6-demo
侧边栏是用图标标记的文本框。它们是对正常内容的补充。
有时,我会通过脚注引用(公开提供的)外部资料。两个来源在方括号中标有前缀