技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營

贊助商

分類目錄

贊助商

最新文章

搜索

千萬別用 isNaN 判斷是否數(shù)字!

作者:admin    時(shí)間:2022-5-12 17:17:1    瀏覽:

說實(shí)在的,在知道這個(gè)事實(shí)之前,我一直用的是isNaN來判斷是否數(shù)字的,我想很多人都在用它,因?yàn)樗唵我子?。在知道這個(gè)事實(shí)之后,我在想,我的應(yīng)用出現(xiàn)了多少誤判事件!

 千萬別用 isNaN 判斷是否數(shù)字!

isNaN的含義及用法

isNaN()是“不是數(shù)字”的意思, NaN=Not a Number 。而isNaN的用法也十分簡單,若isNaN(b)true,則說明b不是數(shù)字。

isNaN的誤判示例

遺憾的是,isNaN會出現(xiàn)誤判的情況,比如下面的幾個(gè)示例:

isNaN(true); //false   誤判
isNaN(""); //false    誤判
isNaN(" "); //false    誤判
isNaN(null); //false    誤判

demodownload

isNaN為什么會誤判

當(dāng) isNaN 函數(shù)的參數(shù)不是Number類型時(shí),該值首先被強(qiáng)制轉(zhuǎn)換為 Number。然后測試結(jié)果值以確定它是否NaN,因此,對于非數(shù)字,當(dāng)強(qiáng)制轉(zhuǎn)換為數(shù)字類型時(shí)會產(chǎn)生一個(gè)有效的非 NaN 數(shù)值(特別是空字符串和布爾基元,當(dāng)強(qiáng)制轉(zhuǎn)換為數(shù)字值 0 或 1)時(shí),“false”返回值可能是意料之外的;例如,空字符串肯定是“不是數(shù)字”,但isNaN("")返回是false

其他判斷是否數(shù)字的方法

既然isNaN不完美,那么我們就找其他的方法吧。除了isNaN,我們還可以用其他方法來判斷是否數(shù)字。這里介紹兩種方法。

1) 使用typeof()

 typeof 操作符返回一個(gè)字符串,表示未經(jīng)計(jì)算的操作數(shù)的類型。

num = 45
strng = '34'
typeof num // 返回 'number'
typeof strng // 返回 "string"
typeof undefined // 返回 "undefined"
typeof null // 返回 "object"

demodownload

如果變量是 number 類型,它將返回 'number'字符串,我們可以使用它來確定變量是否為數(shù)字類型。

var numberOfpushUpsToday = 34; 

if(typeof numberOfpushUpsToday === 'number' ){
    console.log('它是一個(gè)數(shù)字')
}
else {
    console.log('它不是一個(gè)數(shù)字')
}

typeof()的表現(xiàn)要比isNaN()好得多,它正確地確定字符串變量null和布爾值(truefalse)不是數(shù)字。

2) 使用Number.isFinite()

函數(shù)isFinite()確定傳遞的值是否是有限的,參數(shù)首先轉(zhuǎn)換為數(shù)字,然后檢查值是否有限。此方法適用于 undefinedBoolean ,因此這是上述所有方法中最好的方法。

Number.isFinite(34) // 返回 true
Number.isFinite('Hello') // 返回 false
Number.isFinite(undefined) // 返回 false
Number.isFinite(true) // 返回 false
Number.isFinite(null) // 返回 false

demodownload

var numberOfpushUpsToday = 34; 

if(Number.isFinite(numberOfpushUpsToday) ){
    console.log('它是一個(gè)數(shù)字')
}
else {
    console.log('它不是一個(gè)數(shù)字')
}

總結(jié)

本文介紹了isNaN判斷是否數(shù)字的缺陷,另外介紹了兩種判斷是否數(shù)字的方法,推薦使用Number.isFinite()。

相關(guān)文章

標(biāo)簽: isNaN  
相關(guān)文章
    x
    • 站長推薦
    /* 左側(cè)顯示文章內(nèi)容目錄 */