数据类型转换 null undefined string number boolean Array Date RegExp Object Function
把其他数据类型转换成number类型
i
sNaN Number parseInt parseFloat
在进行加减乘除数学运算的时候
true -> 1 false->0
' ' -> 0 '12'->12 '12px' ->NaN/12 '缓冲' ->NaN
null -> 0 undefined ->NaN
{ } /^$/ function(){} -> NaN
[ ]->' ' -> 0
[12] ->'12' ->12
[12,13]->'12,13' ->NaN
引用数据类型转换为数字
通过toString 方法把数组转换为字符串,然后调用Number方法转换为数字
js 中的数学运算
+、-、*、/ 加减乘除
除了加法有特殊性 其他的运算符都是数学运算,也就是遇到非数字类型 ,需要把其转换为number再进行运算
加法的特殊性
在遇到字符串的时候 +不是数学运算 而是字符串拼接 只要不遇到字符串就是数学运算
1 - ‘1’ -> 0
10*null -> 0
10/undefined ->NaN
10*[10] ->100
1+‘1’ -> '11'
null + '1' -> 'null1'
字符串拼接:把其它的值转换为字符串再拼接
其它数据类型的toString是直接把值用单(双)引号包起来即可,只要对象的有特殊性,对象.toString() === '[object Object]' 检测对象类型
1+null ->1
1+true->2
2+undefined -> NaN
NaN + [ ] - > NaN + ' ' ->'NaN'
'NaN' +'瞅瞅‘ ->'NaN瞅瞅’
将其它数据类型转换成布尔类型
Boolean 、! 、!!
在条件判断的时候,也是转换为布尔类型 然后验证条件的真假
只要 0 NaN 空字符串 null undefined 五个转换为 false 其它的都是转换为true
[ ] -> true
-1 -> true
if(box){
首先把box 变量存储 的值获取到,转换为布尔类型,如果为true 条件成立 ,反之不成立
}
if(3+'3px'){
3+‘3px’ ='33px'
}
if(3-'3px'){
3-'3px' =NaN
}
在使用 == 进行比较的时候
在使用 == 进行比较的时候,如果左右两边的数据类型不相同,浏览器会默认转换为相同的类型,然后再进行比较
对象和对象:比较的是空间地址,
[ ] == [ ] -> false 不是相同的空间所以不相等
var a = {} ;
var b =a ;
a==b true
对象和数字:把对象转换为数字
[ ] == 0 -> true [ ] -> ' ' -> 0
({ }) == NaN -> false NaN和自己不相等和其他任何值都不想等
对象和字符串: 把两边都换为数字比较
[ ] == ' ' -> true
对象和布尔: 把两边都转换为数字
[ ] == true -> 0 == 1 false
[ ] == false 0==0 true
![ ] == false ![ ] 把数组变为Boolean 再取反 = false -> false == false -> true
字符串和数字:字符串转换为数字
字符串和布尔:都转换为数字
布尔和数字:布尔转换为数字
总结: == 比较 左右两边数据类型不一样 浏览器会把两边都转换为数字然后再比较,但是 null 和undefined 除外
null == undefined ->true
null === undefined ->false
null 以及 undefined 和其它 任何值不相等
null == 0 false