所谓“抽象操作”(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