JS中数据类型转换(汇总)

把其它数据类型转换为number类型

isNaN、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,23] ->'12,23' ->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是直接的把值用单(双)引号包起来即可,只有对象的有特殊性,对象.toString() === '[object Object]'

1+null+true+undefined+[]+'珠峰'+null+undefined+[]+10
/*
 * 1+null ->1
 * 1+true ->2
 * 2+undefined ->NaN
 * NaN+[] ->NaN+'' ->'NaN'
 * 'NaN'+'珠峰' ->'NaN珠峰'
 * ...
 * 'NaN珠峰nullundefined10'
*/


将其它数据类型转换为布尔类型

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
[]==[]  ->false  
var a={};
var b=a;
a==b ->true

//=>对象和数字:把对象转换为数字
[]==0 ->true
({})==NaN ->false  NaN和自己不相等和其它任何值都不相等

//=>对象和字符串:把两边都转换为数字比较的
[]=='' ->true

//=>对象和布尔:把两边都转换数字
[]==true ->0==1 ->false

[]==false ->0==0 ->true
![]==false ->![] 把数组变为布尔在取反=false  ->false==false ->true

//=>字符串和数字:字符串转换为数字
//=>字符串和布尔:都转为数字
//=>布尔和数字:布尔转换为数字

//=>规律:两个等于号比较,左右两边数据值的类型不一样,浏览器会把两边的类型都转换为数字然后再比较,但是null和undefined除外
null==undefined ->true
null===undefined ->false
null==0  ->false  null以及undefined和其它任何值都不相等