7.1.1 ToPrimitive ( input [ , PreferredType ] )

抽象操作 ToPrimitive 接受 input 参数和可选参数 PreferredType。 抽象操作 ToPrimitive 将其 input 参数转换为非 Object 类型。 如果对象能够转换为多个基本类型,则它可以使用可选的提示 PreferredType 来偏好(favour)该类型。 根据表 9 进行转化:

表9:ToPrimitive 转换

输入类型(Input Type) 结果(Result)
Undefined 返回 input(即输入值的类型)
Null 返回 input(即输入值的类型)
Boolean 返回 input(即输入值的类型)
Number 返回 input(即输入值的类型)
String 返回 input(即输入值的类型)
Symbol 返回 input(即输入值的类型)
Object 执行此表后面的步骤执行

当 Type(input) 为 Object 类型时,则执行下列步骤:

  1. 如果 PreferredType 未被传递,则隐式转换(hint)为 “default”
  2. 否则如果 PreferredType 隐式是 String 类型, 则隐式转换成 "string"
  3. 如果 PreferredType 隐式是 Number 类型, 则隐式转换成 "number"
  4. exoticToPrim 变为 ? GetMethod(input, @@toPrimitive)。
  5. 如果 exoticToPrim 不是 undefined,那么

a. 使 result 变为 ? Call(exoticToPrim, input, « hint »)。
b. 如果 Type(result) 不为 Object 类型,返回 result

c. 抛出一个 TypeError 错误。

6.如果 hint 是 "default",使其隐式转换为 "number"

7.返回 ? OrdinaryToPrimitive(input, hint)。

  1. 注意:当调用 ToPrimitive 时没有提示,那么它通常表现得好像提示是 Number。 然而,对象可以通过定义一个 @@toPrimitive 方法来超越这种行为。 在本规范中定义的对象中,只有 Date 对象(见 20.3.4.45)和 Symbol 对象(见 19.4.3.4)覆盖了默认的ToPrimitive 行为。 日期对象不会提示,就像提示是 String 一样。

results matching ""

    No results matching ""