目录
强制转化
Number()
将任何类型的值转化为数值
原始类型
// 字符串:如果可以被转化为数值,则转化为相应的数值
Number('123'); //123
// 字符串:如果不能转化为数值,则转化为NaN
Number('123abc'); //NaN
// 空字符串:转化为0
Number(''); //0
// 布尔值:true转化为1,false转化为0
Number(true); //1
Number(false); //0
// undefined:转化为NaN
Number(undefined); //NaN
// null:转化为0
Number(null); //0
复合类型
规则如下:
- 先调用对象的valueOf方法。如果返回原始类型的值,则对该值调用Number方法,不再进行后续步骤
- 如果valueOf返回的还是对象,调用toString方法。如果返回原始类型的值,则对该值调用Number方法,不再进行后续步骤
- 如果toString返回的时对象,则报错
大多数对象如果没有自定义valueOf和toString方法,返回的是NaN。包含单个数值的数组将会返回该数值
Number({1:a}); //NaN
Number([1,2,3]); //NaN
Number([5]); //5
String()
将任何类型的值转化为字符串
原始类型
// 数字
String(123); //"123"
// 布尔值:true转化为"true",false转化为"false"
String(true); //"true"
// undefined:转化为"undefined"
String(undefined); //"undefined"
// null:转化为"null"
String(null); //"null"
复合类型
String方法背后的转换规则,与Number方法基本相同,只是互换了valueOf方法和toString方法的执行顺序。
Boolean()
除了下列值,其他值(包括复合类型)转化为true
- 0
- NaN
- undefined
- null
- ‘’
自动转化
预期为数值、字符串、布尔值的地方,系统自动调用Number()、String()和Boolean()进行转化