js之运算中的隐式转换问题
在文章之初.我们不妨先想三个问题:
1.什么是隐式转换?
2.为什么且什么情况下才会发生隐式转换 ?
3.各种数据类型在隐式转换中会发生怎样的转换?
在接下来的文章中我们会一一解决这些问题:
1.什么是隐式转换
相信我们大家都知道Number.String.Boolern.undefined.Null这五种js中的基本数据类型,举个例子:
var str = '12'
var a = 5
str = String(str) //12
var b = a*str
console.log(b) //60
像出现这种情况时,我们一般会用Number()来将字符串先转换为number类型再参与运算,但大家有没有思考过当我们没有把str转化为number类型而直接参与运算,会产生什么结果,又会得到什么答案呢?
var str = '12'
var a = 5
var b = a*str
console.log(b) //60
代码我已经验证过了,结果是依然可以得到正确答案,且答案类型为number >结论: 经过上述论证我们可以得出,在出现运算符的情况下不同数据类型类型的两变量间会发生隐式转化,所谓隐式转化就是他的转化过程是我们看不见的.
2.为什么且什么情况下才会发生隐式转换?
经过我们第一轮的验证,再结合js的执行机制我们也可以得出结论:
因为js代码是从上往下执行,因为两种数据类型通常不能进行运算,所以为了使代码能够顺利执行下去,会发生隐式转换
3.各种数据类型在隐式转换中会发生怎样的转换?
接下来我们就来看一下各种数据类型在隐式转换过程中会发生什么变化
一.Number
- String 类型转 Number 纯数字型字符串或0可转换为Number类型,其余转换为NaN;
- Bollean类型转 Number true–>1 false–>0
- undefined类型转Number NaN
- Null类型转NUmber 0
二.String
当字符串类型遇到连接运算符时,会发生变字符串的隐式转换,"+"存在在运算中时,只要存在字符串,不管在+前还是在+后,其他类型都会转化为字符串类型
三.Boolean
当遇到比较运算符或者个别关系运算符时,会转化为Boolean类型
四.undefined
undefined会把undefined转换为NaN,再进行加减操作
五.Null
会先转化为0在进行加减运算
六.对象和数组
数组和字符串属于引用数据类型,一般会进行两次隐式转化,第一次先转化为字符串类型,第二次再跟据情况进行隐式转换后参与运算