當(dāng)前位置:
                    首頁(yè) >
                            前端技术
>                            javascript
>内容正文                
                        
                    javascript
JS中的NaN和isNaN,简直是双重人格?
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                JS中的NaN和isNaN,简直是双重人格?
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.                        
                                
                            
                            
                            ?number數(shù)字類(lèi)型   包括數(shù)字和NaN,NaN:not a number 但是它是數(shù)字類(lèi)型的   isNaN的用法:檢測(cè)當(dāng)前值是否不是有效數(shù)字,返回true代表不是有效數(shù)字,返回false是有效數(shù)字   //=>語(yǔ)法:isNaN([value])
var num=12;
isNaN(num); //->檢測(cè)num變量存儲(chǔ)的值是否為非有效數(shù)字 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檢測(cè)的機(jī)制:首先驗(yàn)證當(dāng)前要檢測(cè)的值是否為數(shù)字類(lèi)型的,如果不是,瀏覽器會(huì)默認(rèn)的把值轉(zhuǎn)換為數(shù)字類(lèi)型 
把非數(shù)字類(lèi)型的值轉(zhuǎn)換為數(shù)字 其它基本類(lèi)型轉(zhuǎn)換為數(shù)字:直接使用Number這個(gè)方法轉(zhuǎn)換的 [字符串轉(zhuǎn)數(shù)字] Number('13') ->13 Number('13px') ->NaN 如果當(dāng)前字符串中出現(xiàn)任意一個(gè)非有效數(shù)字字符,結(jié)果則為NaN Number('13.5') ->13.5 可以識(shí)別小數(shù)
[對(duì)象] ({}).toString() ->'[object Object]' ->NaN [數(shù)組] [12,23].toString() ->'12,23' ->NaN [12].toString() ->'12' ->12 [正則] /^$/.toString() ->'/^$/' ->NaN [其他] Number('') ->0 [].toString() -> '' => isNaN([]):false 2、當(dāng)前檢測(cè)的值已經(jīng)是數(shù)字類(lèi)型,是有效數(shù)字返回false,不是返回true(數(shù)字類(lèi)型中只有NaN不是有效數(shù)字,其余都是有效數(shù)字) parseInt / parseFloat,等同于Number,也是為了把其它類(lèi)型的值轉(zhuǎn)換為數(shù)字類(lèi)型 和Number的區(qū)別在于字符串轉(zhuǎn)換分析上 Number:出現(xiàn)任意非有效數(shù)字字符,結(jié)果就是NaN parseInt:把一個(gè)字符串中的整數(shù)部分解析出來(lái),parseFloat是把一個(gè)字符串中小數(shù)(浮點(diǎn)數(shù))部分解析出來(lái) parseInt('13.5px') =>13 parseFloat('13.5px') =>13.5
parseInt('width:13.5px') =>NaN 從字符串最左邊字符開(kāi)始查找有效數(shù)字字符,并且轉(zhuǎn)換為數(shù)字,但是一但遇到一個(gè)非有效數(shù)字字符,查找結(jié)束 3. NaN的比較 NaN==NaN:false NaN和誰(shuí)都不相等,包括自己 if(Number(num)==NaN){alert('num不是有效數(shù)字!');}
NaN和誰(shuí)都不相等,條件永遠(yuǎn)不成立(即使num確實(shí)不是有效數(shù)字,轉(zhuǎn)換的結(jié)果確實(shí)是NaN,但是NaN!=NaN的)if(isNaN(num)){//=>檢測(cè)是否為有效數(shù)字,只有這一種方案alert('num不是有效數(shù)字!') }
                        
                        
                        把非數(shù)字類(lèi)型的值轉(zhuǎn)換為數(shù)字 其它基本類(lèi)型轉(zhuǎn)換為數(shù)字:直接使用Number這個(gè)方法轉(zhuǎn)換的 [字符串轉(zhuǎn)數(shù)字] Number('13') ->13 Number('13px') ->NaN 如果當(dāng)前字符串中出現(xiàn)任意一個(gè)非有效數(shù)字字符,結(jié)果則為NaN Number('13.5') ->13.5 可以識(shí)別小數(shù)
[布爾轉(zhuǎn)數(shù)字]
Number(true) ->1 Number(false) ->0 [其它] Number(null) ->0 Number(undefined) ->NaN 把引用數(shù)據(jù)類(lèi)型值轉(zhuǎn)換為數(shù)字:先把引用值調(diào)取toString轉(zhuǎn)換為字符串,然后再把字符串調(diào)取Number轉(zhuǎn)換為數(shù)字[對(duì)象] ({}).toString() ->'[object Object]' ->NaN [數(shù)組] [12,23].toString() ->'12,23' ->NaN [12].toString() ->'12' ->12 [正則] /^$/.toString() ->'/^$/' ->NaN [其他] Number('') ->0 [].toString() -> '' => isNaN([]):false 2、當(dāng)前檢測(cè)的值已經(jīng)是數(shù)字類(lèi)型,是有效數(shù)字返回false,不是返回true(數(shù)字類(lèi)型中只有NaN不是有效數(shù)字,其余都是有效數(shù)字) parseInt / parseFloat,等同于Number,也是為了把其它類(lèi)型的值轉(zhuǎn)換為數(shù)字類(lèi)型 和Number的區(qū)別在于字符串轉(zhuǎn)換分析上 Number:出現(xiàn)任意非有效數(shù)字字符,結(jié)果就是NaN parseInt:把一個(gè)字符串中的整數(shù)部分解析出來(lái),parseFloat是把一個(gè)字符串中小數(shù)(浮點(diǎn)數(shù))部分解析出來(lái) parseInt('13.5px') =>13 parseFloat('13.5px') =>13.5
parseInt('width:13.5px') =>NaN 從字符串最左邊字符開(kāi)始查找有效數(shù)字字符,并且轉(zhuǎn)換為數(shù)字,但是一但遇到一個(gè)非有效數(shù)字字符,查找結(jié)束 3. NaN的比較 NaN==NaN:false NaN和誰(shuí)都不相等,包括自己 if(Number(num)==NaN){alert('num不是有效數(shù)字!');}
NaN和誰(shuí)都不相等,條件永遠(yuǎn)不成立(即使num確實(shí)不是有效數(shù)字,轉(zhuǎn)換的結(jié)果確實(shí)是NaN,但是NaN!=NaN的)if(isNaN(num)){//=>檢測(cè)是否為有效數(shù)字,只有這一種方案alert('num不是有效數(shù)字!') }
?
【布爾 boolean】
只有兩個(gè)值:true / false,把其它數(shù)據(jù)類(lèi)型的值轉(zhuǎn)換為布爾類(lèi)型:除了“NaN/0/''/null/undefined”這五個(gè)值會(huì)轉(zhuǎn)換為false,其余的都會(huì)轉(zhuǎn)換為true 哪些情況需要把其它類(lèi)型值轉(zhuǎn)換為布爾呢? // [手動(dòng)自己轉(zhuǎn)] Boolean(0) => false Boolean([]) => true []==false => true // 都轉(zhuǎn)換為數(shù)字 0==0 ![]==false => true // 先算![],把數(shù)組轉(zhuǎn)換為布爾取反=>false =>false==false 除了Boolean可把其他類(lèi)型轉(zhuǎn)化為數(shù)字類(lèi)型外,!和雙!!也是把其他類(lèi)型轉(zhuǎn)化成布爾類(lèi)型,項(xiàng)目中一般用!!轉(zhuǎn)換(逼格高~) !0 =>true 嘆號(hào)在這里是取反的意思(先轉(zhuǎn)化為布爾類(lèi)型然后再取反) !!0 =>false 兩個(gè)嘆號(hào)只剩下轉(zhuǎn)換為布爾類(lèi)型了,等價(jià)于Boolean // [程序自己需要轉(zhuǎn)換 =>一般都是條件判斷的時(shí)候],if內(nèi)的值會(huì)默認(rèn)轉(zhuǎn)換成布爾類(lèi)型,如果為真執(zhí)行,為false則不執(zhí)行 if(1){//=>如果條件成立,執(zhí)行大括號(hào)中的代碼//=>瀏覽器會(huì)把1作為條件:把它轉(zhuǎn)換為布爾的TRUE,條件成立 } 特殊情況:數(shù)學(xué)運(yùn)算和字符串拼接 “+” 當(dāng)表達(dá)式中出現(xiàn)字符串,就是字符串拼接,否則就是數(shù)學(xué)運(yùn)算 1+true =>2 //數(shù)學(xué)運(yùn)算 '1'+true =>'1true' //字符串拼接 [12]+10 =>'1210' //雖然現(xiàn)在沒(méi)看見(jiàn)字符串,但是引用類(lèi)型轉(zhuǎn)換為數(shù)字,首先會(huì)轉(zhuǎn)換為字符串,所以變?yōu)榱俗址唇?/span> ({})+10 =>"[object Object]10" []+10 =>"10" {}+10 =>10? ? ?結(jié)果為10,但是這個(gè)和以上說(shuō)的沒(méi)有半毛錢(qián)關(guān)系,因?yàn)樗揪筒皇菙?shù)學(xué)運(yùn)算,也不是字符串拼接,它是兩部分代碼 {} 代表一個(gè)代碼塊(塊級(jí)作用域)? ?+10 才是我們的操作? ? ??嚴(yán)格寫(xiě)法:{}; +10;轉(zhuǎn)載于:https://www.cnblogs.com/jiajialove/p/10998710.html
總結(jié)
以上是生活随笔為你收集整理的JS中的NaN和isNaN,简直是双重人格?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: Python爬虫_selenium
- 下一篇: 在Ubuntu上安装openResty
