JS显式类型转换及关于隐式类型转化的底层逻辑
在提隐式转化之前,先看一下显式类型转化与隐式类型转化的区别:
显式类型转换是指使用函数主动将JS数据类型转化,而隐式类型转化是指在程序运行中程序自动转化类型的情况。
console.log(Number(true)) // 1 发生显示类型转化
console.log(true - false) // 1-0=1 发生隐式类型转化
显式类型转换的几种函数:
- Number() 将其他类型的数据转化为数值型,并返回转化结果
- parseInt() 转化为整数型数值,参数是其他的数据
- parseFloat() 将其他类型数据转化为浮点型
- String() 将其他类型数据转化为字符串
- toString() 将其他类型数据转化为字符串
- Boolean() 将其他类型数据转化为布尔值
注意:在JS数据在转化为数值型时,没有匹配的数值那么就是NaN
1.任何数跟NaN算数运算都是NaN
2.任何数跟NaN比较都是false
3.NaN不等于NaN
隐式类型转化
在了解到JS中的隐式类型转化时,需要了解到两个问题:
- 在JS底层中,什么数据可以进行运算?
- 为什么会有隐式转化?
下面将分别进行解答:
在JS底层中,什么数据可以进行运算?
在JS底层中只有基本类型的数据才能进行运算。
拓展:JS基础类型(boolean、string、number、undefined、null)
JS引用类型(array、object、function)
为什么会有隐式转化?
所有引用类型的数据,需要运算时候;先需要转化为基本类型数据;再运算。
所有引用类型数据在转化时只能先转为字符串;最后再有字符串转为其他类型。
因为浏览器默认数据就是字符串;所以只能转字符串,在其他运算符作用下转化为其他类型。
举例:
var res = ['111','0',12] + ['11','aaa'] // + 连接符
// ['111','0',12] --> '111,0,12'
// + 为连接符号
// ['11','aaa'] ----> '11,aaa'
// res = '11,0,1211,aaa'
// 代码中将数组转化为字符串,其中+为连接符
var res = ['111','0',12] - ['11','aaa']
// ['111','0',12] ----> '111,0,12'
// ['11','aaa'] ----->'11,aaa'
// ---> '111,0,12' - '11,aaa'
// ---> NaN -NaN
// res = NaN
// 代码中先将数组转化为字符串,再将字符串转化为number
var res = ['23',23,true] + {name:'aaa'} + 1
// ['23',23,true] ----> '23,23,true'
// {name:'aaa'} ----> '[object Object]'
// res = '23,23,true[object Object]1'
// 在默认隐式转化中;所有的对象都转化为 '[object Object]'