类型转换问题
一、概述
类型转换问题是比较头疼的,下面直接来看一下我的思维导图吧:
二、本篇博客的目的
本篇博客的目的就把基本数据类型间的转化整明白。下面直接将进入正题
三、基本数据 -> Boolean
这个比较好整,就只有一种方法可以转到Boolean,那就是调用Boolean()。这个Boolean()的特点如下:
3.1、null、undefined、NaN -> false
3.2、0 -> false
3.3、其余 -> true
验证如下:
console.log(Boolean(undefined)) // false
console.log(Boolean(NaN)) // false
console.log(Boolean(null)) // false
console.log(Boolean(0)) // false
console.log(Boolean('0')) // false
四、基本数据 -> String
根据上面的思维导图,我们已经知道基本数据类型转化为String类型,可以有2种方法:
4.1、toString(x)
在基本数据类型中,除了undefined、null,其余的基本数据类型都有toString()。它的使用比较灵活,美没有忌口的东西,传进来啥就得到啥。
验证如下:
console.log('123'.toString()) // '123'
console.log('0123'.toString()) // '0123'
console.log(true.toString()) // 'true'
4.2、String(x)
当调用String方法的时候,实际上是调用了ToString方法,ToString的转换规则如下:
x | value |
---|---|
undefined | ‘undefined’ |
null | ‘null’ |
NaN | ‘NaN’ |
string | string |
number | ‘number’ |
参考规范:参考规范
测试如下:
console.log(String(undefined)) // 'undefined'
console.log(String(null)) // 'null'
console.log(String(NaN)) // 'NaN'
console.log(String(123)) // '123'
console.log(String(0123)) // 83
console.log(String('0123')) // '0123'
推荐用法:String(),因为undefined和null不能使用toString()
五、基本数据 -> Number
3种方法:
1、Number(x)
当调用Number方法的时候,实际上会调用ToNumber方法,ToNumber方法的转换规则对应如下:
x | value |
---|---|
undefined | NaN |
NaN | NaN |
null | 0 |
boolean | 1(true)、0(false) |
number | number |
string | ‘’ -> 0 ; ’ '-> 0;以0开头的字符串,忽略前导0;否则数字字符串中只要有一个非数字,就转换为NaN |
测试如下:
console.log(Number(undefined)) // NaN
console.log(Number(NaN)) // NaN
console.log(Number(null)) // 0
console.log(Number('')) // 0
console.log(Number(' ')) // 0
console.log(Number('0')) // 0
console.log(Number('0123')) // 123
console.log(Number('123 ')) // 123
console.log(Number(' 123')) // 123
console.log(Number('123a')) // NaN
2、parseInt(x)
这个比较灵活,转换规则稍微有点不同,转换规则如下:
x | value |
---|---|
undefined | NaN |
NaN | NaN |
null | NaN |
number | number取整,不会四舍五入 |
string | 如果第一个字符是非数字,直接返回NaN |
测试如下:
console.log(parseInt(undefined)) //NaN
console.log(parseInt(NaN)) //NaN
console.log(parseInt(null)) //NaN
console.log(parseInt('')) //NaN
console.log(parseInt(' ')) //NaN
console.log(parseInt(' 123')) //NaN
console.log(parseInt('012345')) //12345
3、parseFloat
转换规则同上
五、总结
希望本篇博客能够给你带来不一样的感觉,哈哈哈哈哈