数据类型转换      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