數(shù)據(jù)類型轉(zhuǎn)換
把其他數(shù)據(jù)類型轉(zhuǎn)換為number
isNaN , Number , parseInt , parseFloat
在進(jìn)行加減乘除數(shù)學(xué)運(yùn)算的時候
// true -> 1
// false -> 0
// null -> 0
// undefined -> NaN
// "" -> 0
// "12" -> 12
// "12px" -> NaN/12
// "lilei" -> NaN
// {} -> NaN
// function() -> NaN
// /^$/ -> NaN
// [] -> "" -> 0
// [12] -> "12" -> 12
// [12,23] -> "12,23" -> NaN/12
// 引用數(shù)據(jù)類型轉(zhuǎn)換為數(shù)字
// 通過toString方法把數(shù)組轉(zhuǎn)化為字符串,然后再調(diào)用Number把字符串轉(zhuǎn)換為數(shù)字
js中的數(shù)學(xué)運(yùn)算
+ - * /加減乘除
除了加法有特殊性,其他的運(yùn)算符都是數(shù)學(xué)運(yùn)算,也就是遇到非數(shù)字類型,需要把其他轉(zhuǎn)換為number在進(jìn)行運(yùn)算
*加法的特殊性: *
在遇到字符串的時候 ,+不是數(shù)學(xué)運(yùn)算 , 而是字符串拼接 , 只要不遇到字符串就是數(shù)學(xué)運(yùn)算
// 減 乘 除
// 1 -'1' -> 0
// 10 * null -> 0
// 10 / undefined -> NaN
// 10 * [10] -> 100
// 加
// 1 + "1" -> "11"
// null + "1" -> "null1"
// 字符串拼接: 是把其他的值轉(zhuǎn)換為字符串然后再拼接(toString)
// 其他數(shù)據(jù)類型的toString是直接的把值用單(雙)引號包起來即可,只有對象的有特殊性,對象.toString() === "[object Object]"
// 練習(xí)
// 1+null+true+undefined+[]+'lilei'+null+undefined+[]+10
/* 1 + null -> 1
* 1 + true -> 2
* 2 + undefined -> NaN
* NaN + [] -> NaN + "" -> "NaN"
* "NaN" + "lilei" -> "NaNlilei"
* ...
* "NaNlileinullundefined10"
/
把其他類型轉(zhuǎn)換為布爾類型
Boolean , ! , !!
在條件判斷的時候,也是轉(zhuǎn)換為布爾類型,然后驗(yàn)證條件的真假只有
0 , NaN , 空字符串 , null , undefined五個轉(zhuǎn)換為false,其余的都是轉(zhuǎn)換為true
// [] -> true
// -1 -> true
if(box){
// -> 首先把box變量存儲的值獲取到,轉(zhuǎn)換為布爾類型,如果為true條件成立,反之不成立
}
if(3 + "3px"){ // "33px"
// -> 條件成立
}
if(3 - "3px"){ // NaN
// -> 條件不成立
}
在使用 == 進(jìn)行比較的時候
在使用
==進(jìn)行比較的時候,如果左右兩邊的數(shù)據(jù)類型不相同,瀏覽器會默認(rèn)轉(zhuǎn)換為相同的類型,然后再比較(===不會這樣操作)
// -> 對象和對象: 比較的是空間地址,不是相同的空間,結(jié)果肯定是false
// [] == [] -> false
// var a = {};
// var b = a;
// a == b -> true
// -> 對象和數(shù)字: 把對象轉(zhuǎn)換為數(shù)字
// [] == 0 -> true
// ({}) == NaN -> false NaN和自己不相等,和其他任何值都不相等
// -> 對象和字符串: 把兩邊都轉(zhuǎn)換為數(shù)字比較的
// [] == "" -> true
// -> 對象和布爾: 把兩邊都轉(zhuǎn)換為數(shù)字
// [] == true -> 0 == 1 -> false
// [] == false -> 0 == 0 -> true
// ![] == false -> true -> ![] 把數(shù)組變?yōu)椴紶栐偃》?= false , false == false -> true
// -> 字符串和數(shù)字: 字符串轉(zhuǎn)換為數(shù)字
// -> 字符串和布爾: 都轉(zhuǎn)換為數(shù)字
// -> 布爾和數(shù)字: 布爾轉(zhuǎn)換為數(shù)字
規(guī)律: 兩個等于號比較,左右兩邊數(shù)據(jù)值的類型不一樣,瀏覽器會把兩邊的類型都轉(zhuǎn)換為數(shù)字然后再比較,但是null和undefined除外
null == undefined -> true
null === undefined -> falsenull以及undefined和其他任何值都不相等
- null == 0 -> false