在介绍强制转换之前,不论是显式的还是隐式的,我们需要了解字符串、数字和布尔值之间类型转换的基本规则,这些规则(也叫抽象操作)是仅供内部使用的。
toString
抽象操作toString
负责处理非字符串到字符串的强制类型转换。基本类型值得字符串化规则是:null
转换成"null"
,undefined
转换为"undefined"
,true
转换成"true"
。数字的字符串化则遵循通用规则。
toNumber
抽象操作toNumber
处理非数字值到数字值的强制类型转换。规则如下:
true
变成1
,false
变成0
,undefined
转换成NaN
,null
变成0
- 对字符串的处理基本遵循数字常量的相关规则和语法,处理失败返回
NaN
。
- 对象会首先转换为相应的基本类型值,如果返回的是非数字的基本类型值,则再遵循以上规则将其强制转换为数字。
为了将值转换为相应的基本类型值,抽象操作ToPrimitive
首先通过内部操作DefaultValue
检查改制是否有valueOf()
方法,如果有并且返回基本类型值,就使用该值进行强制类型转换。如果灭有就使用toString()
的返回值来进行强制类型转换。如果两者都没有,产生TypeError
错误。