number數字類型
包括數字和NaN,NaN:not a number 但是它是數字類型的
isNaN的用法:檢測當前值是否不是有效數字,返回true代表不是有效數字,返回false是有效數字
//=>語法:isNaN([value]) var num=12; isNaN(num); //->檢測num變量存儲的值是否為非有效數字 false isNaN('13') =>false isNaN('你好呀') =>true isNaN(true) =>false isNaN(false) =>false isNaN(null) =>false isNaN(undefined) =>true isNaN({age:9}) =>true isNaN([12,23]) =>true isNaN([12]) =>false isNaN(/^$/) =>true isNaN(function(){}) =>true
1、isNaN檢測的機制:首先驗證當前要檢測的值是否為數字類型的,如果不是,瀏覽器會默認的把值轉換為數字類型
把非數字類型的值轉換為數字
其它基本類型轉換為數字:直接使用Number這個方法轉換的
[字符串轉數字]
Number('13') ->13 Number('13px') ->NaN 如果當前字符串中出現任意一個非有效數字字符,結果則為NaN Number('13.5') ->13.5 可以識別小數
[布爾轉數字]
Number(true) ->1 Number(false) ->0
[其它]
Number(null) ->0 Number(undefined) ->NaN
把引用數據類型值轉換為數字:先把引用值調取toString轉換為字符串,然后再把字符串調取Number轉換為數字
[對象]
({}).toString() ->'[object Object]' ->NaN
[數組]
[12,23].toString() ->'12,23' ->NaN
[12].toString() ->'12' ->12
[正則]
/^$/.toString() ->'/^$/' ->NaN
[其他]
Number('') ->0 [].toString() -> '' => isNaN([]):false
2、當前檢測的值已經是數字類型,是有效數字返回false,不是返回true(數字類型中只有NaN不是有效數字,其余都是有效數字)
parseInt / parseFloat,等同於Number,也是為了把其它類型的值轉換為數字類型
和Number的區別在於字符串轉換分析上
Number:出現任意非有效數字字符,結果就是NaN
parseInt:把一個字符串中的整數部分解析出來,parseFloat是把一個字符串中小數(浮點數)部分解析出來
parseInt('13.5px') =>13 parseFloat('13.5px') =>13.5
parseInt('width:13.5px') =>NaN 從字符串最左邊字符開始查找有效數字字符,並且轉換為數字,但是一但遇到一個非有效數字字符,查找結束
3. NaN的比較
NaN==NaN:false NaN和誰都不相等,包括自己
if(Number(num)==NaN){ alert('num不是有效數字!'); }
NaN和誰都不相等,條件永遠不成立(即使num確實不是有效數字,轉換的結果確實是NaN,但是NaN!=NaN的) if(isNaN(num)){ //=>檢測是否為有效數字,只有這一種方案 alert('num不是有效數字!') }
【布爾 boolean】
只有兩個值:true / false,把其它數據類型的值轉換為布爾類型:除了“NaN/0/''/null/undefined”這五個值會轉換為false,其余的都會轉換為true
哪些情況需要把其它類型值轉換為布爾呢?
// [手動自己轉] Boolean(0) => false Boolean([]) => true []==false => true // 都轉換為數字 0==0 ![]==false => true // 先算![],把數組轉換為布爾取反=>false =>false==false
除了Boolean可把其他類型轉化為數字類型外,!和雙!!也是把其他類型轉化成布爾類型,項目中一般用!!轉換(逼格高~)
!0 =>true 嘆號在這里是取反的意思(先轉化為布爾類型然后再取反)
!!0 =>false 兩個嘆號只剩下轉換為布爾類型了,等價於Boolean
// [程序自己需要轉換 =>一般都是條件判斷的時候],if內的值會默認轉換成布爾類型,如果為真執行,為false則不執行 if(1){ //=>如果條件成立,執行大括號中的代碼 //=>瀏覽器會把1作為條件:把它轉換為布爾的TRUE,條件成立 }
特殊情況:數學運算和字符串拼接 “+”
當表達式中出現字符串,就是字符串拼接,否則就是數學運算
1+true =>2 //數學運算 '1'+true =>'1true' //字符串拼接 [12]+10 =>'1210' //雖然現在沒看見字符串,但是引用類型轉換為數字,首先會轉換為字符串,所以變為了字符串拼接 ({})+10 =>"[object Object]10" []+10 =>"10"
{}+10 =>10 結果為10,但是這個和以上說的沒有半毛錢關系,因為它根本就不是數學運算,也不是字符串拼接,它是兩部分代碼
{} 代表一個代碼塊(塊級作用域) +10 才是我們的操作 嚴格寫法:{}; +10;