JS显式类型转换及关于隐式类型转化的底层逻辑

JS显式类型转换及关于隐式类型转化的底层逻辑

在提隐式转化之前,先看一下显式类型转化与隐式类型转化的区别:

显式类型转换是指使用函数主动将JS数据类型转化,而隐式类型转化是指在程序运行中程序自动转化类型的情况。

console.log(Number(true)) // 1  发生显示类型转化
console.log(true - false) // 1-0=1  发生隐式类型转化

显式类型转换的几种函数:

  1. Number() 将其他类型的数据转化为数值型,并返回转化结果
  2. parseInt() 转化为整数型数值,参数是其他的数据
  3. parseFloat() 将其他类型数据转化为浮点型
  4. String() 将其他类型数据转化为字符串
  5. toString() 将其他类型数据转化为字符串
  6. Boolean() 将其他类型数据转化为布尔值
注意:在JS数据在转化为数值型时,没有匹配的数值那么就是NaN

1.任何数跟NaN算数运算都是NaN

2.任何数跟NaN比较都是false

3.NaN不等于NaN

隐式类型转化

在了解到JS中的隐式类型转化时,需要了解到两个问题:

  1. 在JS底层中,什么数据可以进行运算?
  2. 为什么会有隐式转化?

下面将分别进行解答:

在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]'

猜你喜欢

转载自blog.csdn.net/Msinwln/article/details/106843054