强制转换主要指使用Number()
、String()
和Boolean()
三个函数,手动将各种类型的值,分别转换成数字、字符串或者布尔值。
一、Number()
使用Number
函数,可以将任意类型的值转化成数值。参数是原始类型值,正常转化成数值;参数是单个数值的数组,也可转化成数值。
当Number
方法的参数是对象时,将返回NaN
,其转换规则为:
第一步,调用对象自身的valueOf
方法。如果返回原始类型的值,则直接对该值使用Number
函数,不再进行后续步骤。
第二步,如果valueOf
方法返回的还是对象,则改为调用对象自身的toString
方法。如果toString
方法返回原始类型的值,则对该值使用Number
函数,不再进行后续步骤。
第三步,如果toString
方法返回的是对象,就报错。
二、String()
使用String
函数,可以将任意类型的值转化成字符串。参数是原始类型值
数值:转为相应的字符串;字符串:转换后还是原来的值;布尔值:true
转为字符串"true"
,false
转为字符串"false";
undefined:转为字符串"undefined";
null:转为字符串"null"
。
当String方法的参数是对象时,返回一个类型字符串,如果是数组,返回该数组的字符串形式,其转换规则为:
-
先调用对象自身的
toString
方法。如果返回原始类型的值,则对该值使用String
函数,不再进行以下步骤。 -
如果
toString
方法返回的是对象,再调用原对象的valueOf
方法。如果valueOf
方法返回原始类型的值,则对该值使用String
函数,不再进行以下步骤。 -
如果
valueOf
方法返回的是对象,就报错。
三、Boolean()
Boolean
函数可以将任意类型的值转为布尔值。
除了undefined、null、-0
或+0、NaN、''
(空字符串)这五个值的转换结果为false
,其他的值全部为true
。
遇到以下三种情况时,JavaScript 会自动转换数据类型,即转换是自动完成的,用户不可见。自动转换的规则是预期什么类型的值,就调用该类型的转换函数。
1、不同类型的数据互相运算。
2、对非布尔值类型的数据求布尔值
3、对非数值类型的值使用一元运算符(即+
和-
)