值类型之间的数据类型转换:
(1)数字和字符串使用+运算符:
数字和字符串如果使用+运算符进行操作,那么会将数字先转换为字符串,然后进行字符串连接操作:
(2)布尔值参与的+运算符操作:
如果有布尔型参与,那么首先会将布尔值转换为对应的数字或者字符串,然后再进行相应的字符串连接或者算数运算。
(3)Null和Undefined参与的+运算符操作
如果和数字进行计算,null会转化为0,undefined会转化成NaN
(4)减法操作:
如果一个操作数为string、boolean、null、undefined,则在后台调用Number()函数,将其转换成数值,再进行操作。
如果进行减法操作,那么两个操作数都会先被转换为数字,然后在进行算数运算:
注意:Null转换为0,Undefined转换成NaN
(4)==等性运算:
undefined和null比较特殊,它们两个使用==运算符返回值是true。
其他值类型(Number、Boolean、Null、Undefined)进行比较的时候都会将运算数转换为数字
隐式类型转换,有时候,会隐藏一些错误的,比如,null会转换成0,undefined会转换成NaN。需要注意的是,NaN和NaN是不相等的(这是由于浮点数的精度决定的)
虽然,JavaScript提供了isNaN来检测某个值是否为NaN,但是,这也不太精确的,因为,在调用isNaN函数之前,本身就存在了一个隐式转换的过程,它会把那些原本不是NaN的值转换成NaN的,
使用不等于号(!==)来判断一个数是否等于自身,从而,可以检测到NaN了
// 拓展 类型加法操作表
Number + Number -> 加法
Boolean + Number -> 加法
Boolean + Boolean -> 加法
Number + String -> 连接
String + Boolean -> 连接
String + String -> 连接
字符串加法运算只是拼接 , 而减 , 乘 , 除 都是讲其转为数字进行运算 , 如果有字母返回NaN