一、类型转换与转型函数
转为数值:Number() parseInt() parseFloat()
转为字符串:String() toString()
转为布尔值:Boolean()
1、转为数值
| Number() | parseInt() | parseFloat() | |
|---|---|---|---|
| 1 | 1 | 1 | 1 |
| 1.5 | 1.5 | 1 | 1.5 |
| NaN | NaN | NaN | NaN |
| '12.5' | 12.5 | 12 | 12.5 |
| 'aaa12' | NaN | NaN | NaN |
| '12aaa' | NaN | 12 | 12 |
| '12.5aaa' | NaN | 12 | 12.5 |
| true | 1 | NaN | NaN |
| [] | 0 | NaN | NaN |
| [1, 2] | NaN | 1 | 1 |
| {} | NaN | NaN | NaN |
| {name: 'jack'} | NaN | NaN | NaN |
| null | 0 | NaN | NaN |
| undefined | NaN | NaN | NaN |
根据上表可以看出一些规律,具体的规则如下:
- parseInt 和 parseFloat只能转换数值、非空字符串和非空对象,且字符串必须以数字或加减号开头。其他均会返回NaN。
- parseInt无法识别小数点,因为它不是有效的整数字符,同时,parseInt可以识别不同的进制,建议始终传第二个参数10。
- parseFloat只解析十进制值,所以首字符0会被忽略,第二个小数点也是无效的。
- Number()只能识别数字、加减号、0x和小数点,包含其他字符的字符串,或者包含两个小数点的字符串都会转换为NaN。十六进制会转换为十进制。空字符串返回0。
- 对于对象,调用valueOf()或toString()方法再进行转换,因此空数组先toString得到空字符串,进而得到0,而空对象得到'[object Object]',进而得到NaN。
2、转为字符串
String()和toString()都可以进行转换,两者几乎相等,区别就是 null 和 undefined 没有toString方法。因此我们只看String即可。
| String() | |
|---|---|
| +1 | '1' |
| -1.5 | '-1.5' |
| NaN | 'NaN' |
| true | 'true' |
| false | 'false' |
| [] | '' |
| [1, 2] | '1, 2' |
| {} | '[object Object]' |
| {name: 'jack'} | '[object Object]' |
| null | 'null' |
| undefined | 'undefined' |
由此可见,对数值、布尔值、null、undefined基本上就是在外面加了个引号变成字符串。其中加号会被忽略。对对象依旧是调用valueOf()或toString()方法再进行转换。
3、转为布尔值
| Boolean() | |
|---|---|
| 0 | false |
| +1 | true |
| -1.5 | true |
| NaN | false |
| '' | false |
| 'aaa' | true |
| '12aaa' | true |
| [] | true |
| [1, 2] | true |
| {} | true |
| {name: 'jack'} | true |
| null | false |
| undefined | false |
转为布尔值的规则比较简单:
- 0和NaN转为false,其他数值为true
- 空字符串为false,其他字符串为true
- null和undefined都转为false
- 任意对象都为true
\