如有一个布尔对象。
var a=new Boolean(true);
var b=a+10
这里的结果就会变成11,而式子是一个对象和一个布尔对象进行相加,中间进行了很多潜在的转换,主要过程如下:
(1)
首先系统会调用对象默认的valueOf( )方法,将返回对象自身的值。
a.valueOf( )之后,就返回true,typeof一下的话,这个是个Boolean类型,而不再是Object类型。
(2)
再调用toString()方法,将对象转换成字符串类型。虽然值还是true,但第1步里的是boolean,这里的是string。
(3)
然后调 用parseInt()或parseFloat()将字符串转换成数值。但这里由于是true,所以两个都将返回NaN,于是再尝试用Number()的方式进行强制转换,最后才得到true对应的数值1。这个时候的变量类型变成number。
parseInt()和parseFloat()均只能将字符串转换为数值,而Number( )适用于任何类型。