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 类型时,则执行下列步骤:
- 如果 PreferredType 未被传递,则隐式转换(hint)为 “default”。
- 否则如果 PreferredType 隐式是 String 类型, 则隐式转换成 "string"。
- 如果 PreferredType 隐式是 Number 类型, 则隐式转换成 "number"。
- 令 exoticToPrim 变为 ? GetMethod(input, @@toPrimitive)。
- 如果 exoticToPrim 不是 undefined,那么
a. 使 result 变为 ? Call(exoticToPrim, input, « hint »)。
b. 如果 Type(result) 不为 Object 类型,返回 result。
c. 抛出一个 TypeError 错误。
6.如果 hint 是 "default",使其隐式转换为 "number"。
7.返回 ? OrdinaryToPrimitive(input, hint)。