當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JS中的NaN和isNaN,简直是双重人格?
生活随笔
收集整理的這篇文章主要介紹了
JS中的NaN和isNaN,简直是双重人格?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?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 可以識別小數
[對象] ({}).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不是有效數字!') }
把非數字類型的值轉換為數字 其它基本類型轉換為數字:直接使用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;轉載于:https://www.cnblogs.com/jiajialove/p/10998710.html
總結
以上是生活随笔為你收集整理的JS中的NaN和isNaN,简直是双重人格?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python爬虫_selenium
- 下一篇: 在Ubuntu上安装openResty