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