所谓“抽象操作”(abstract operations)就是引擎的一些内部方法,外部不能调用。规格定义了一系列的抽象操作,规定了它们的行为,留给各种引擎自己去实现。
举例来说,的算法,第一步是这样的。
这里的ToBoolean
就是一个抽象操作,是引擎内部求出布尔值的算法。
ES6 规格将键值对(key-value map)的数据结构称为 Record,其中的每一组键值对称为 field。这就是说,一个 Record 由多个 field 组成,而每个 field 都包含一个键名(key)和一个键值(value)。
ES6 规格大量使用[[Notation]]
这种书写法,比如[[Value]]
、[[Writable]]
、[[Get]]
、[[Set]]
等等。它用来指代 field 的键名。
举例来说,obj
是一个 Record,它有一个属性。ES6 规格不会写obj.Prototype
,而是写obj.[[Prototype]]
。一般来说,使用[[Notation]]
这种书写法的属性,都是对象的内部属性。
上面代码中,F
是一个函数对象,[[Call]]
是它的内部方法,F.[[call]]()
表示运行该函数,V
表示[[Call]]
运行时的值,argumentsList
则是调用时传入函数的参数。
每一个语句都会返回一个 Completion Record,表示运行结果。每个 Completion Record 有一个[[Type]]
属性,表示运行结果的类型。
[[Type]]
属性有五种可能的值。
- return
- throw
- continue