關(guān)于jQuery $.isNumeric vs. $.isNaN vs. isNaN
在jQuery中,有幾種方式可以判斷一個(gè)對(duì)象是否是數(shù)字,或者可否轉(zhuǎn)換為數(shù)字。
首先,jQuery.isNaN()在最新版本中已經(jīng)被移除了(1.7之后),取而代之的是 jQuery.isNumeric ()。這并不奇怪,因?yàn)閖Query.isNaN() 同Javascript內(nèi)置的isNaN()名字相同,但是語(yǔ)義卻不完全相同,在一定意義上會(huì)造成歧義。 jQuery.isNumeric ()有著與其相似的功能,同時(shí)也解決了歧義問題。
jQuery.isNumeric ()檢查傳進(jìn)的參數(shù)是否是數(shù)字或者可否轉(zhuǎn)換為數(shù)字;Javascript 內(nèi)置的isNaN() 檢查傳進(jìn)的參數(shù)是否是一個(gè)合法的數(shù)字,典型的例子是0/0。
具體區(qū)別可以看測(cè)試:
測(cè)試數(shù)據(jù):
var values = [
"-10",
,
xFF,
"0xFF",
"8e5",
.1415,
+10,
,
"",
{},
NaN,
null,
true,
Infinity,
undefined,
false
];
使用jQuery verision1.6:
for( var index in values ) {
var v = values[ index ];
$( 'table' ).append( '<tr><td>'+v+'</td><td>'
+(!isNaN( v )?"true":"false")
+'</td><td>'
+(!$.isNaN( v )?"true":"false")
+'</td></tr>' );
}
輸出:
|
!isNaN() |
!$.isNaN() |
-10 |
true |
true |
16 |
true |
true |
255 |
true |
true |
0xFF |
true |
true |
8e5 |
true |
true |
3.1415 |
true |
true |
10 |
true |
true |
100 |
true |
true |
|
true |
false |
[object Object] |
false |
false |
NaN |
false |
false |
null |
true |
false |
true |
true |
false |
Infinity |
true |
false |
undefined |
false |
false |
使用 jQuery version1.7
for( var index in values ) {
var v = values[ index ];
$( 'table' ).append( '<tr><td>'+v+'</td><td>'
+(!isNaN( v )?"true":"false")
+'</td><td>'
+($.isNumeric( v )?"true":"false")
+'</td></tr>' );
}
輸出:
!isNaN() |
$.isNumeric() | |
-10 |
true |
true |
16 |
true |
true |
255 |
true |
true |
0xFF |
true |
true |
8e5 |
true |
true |
3.1415 |
true |
true |
10 |
true |
true |
100 |
true |
true |
|
true |
false |
[object Object] |
false |
false |
NaN |
false |
false |
null |
true |
false |
true |
true |
false |
Infinity |
true |
false |
undefined |
false |
false |
可以看出,$.isNumeric() 跟 !$.isNaN() 結(jié)果是一樣的, 而 jQuery $.isNumeric() 同Javascript 自帶的!isNaN()在對(duì)空字符串、null、true/false、Infinity的處理是不同的。因?yàn)閕sNaN()只是檢查傳入的值是否是NaN類型。
NaN (Not a Number)是一個(gè)數(shù)字?jǐn)?shù)據(jù)類型,表明未定義(undefined )或無(wú)法表示(unrepresentable )的值,尤其是浮點(diǎn)數(shù)計(jì)算值。
因此,isNaN(null) == false 在語(yǔ)義上是正確的,因?yàn)閚ull不是NaN(事實(shí)上null、ture/false等等會(huì)先轉(zhuǎn)為數(shù)字0)。但是如果用!isNaN()來(lái)判斷傳入的值可否轉(zhuǎn)換為數(shù)字,又不大恰當(dāng)。而Javascript另一種方式 typeof num == 'number' 則無(wú)法檢測(cè)字符串情況。因此如果不使用 jQuery $.isNumeric(),則最好還是重寫一個(gè)方法判斷,比如用正則來(lái)判斷或者:
function isNumeric(obj) {
return !isNaN(parseFloat(obj)) && isFinite(obj);
}
相關(guān)文章
Javascript基礎(chǔ)教程之?dāng)?shù)據(jù)類型 (布爾型 Boolean)
本文簡(jiǎn)單講解了javascript數(shù)據(jù)類型中的布爾型(boolean),十分的簡(jiǎn)單,小伙伴們看下就明白了2015-01-01舉例講解JavaScript中將數(shù)組元素轉(zhuǎn)換為字符串的方法
這篇文章主要介紹了JavaScript中將數(shù)組元素轉(zhuǎn)換為字符串的方法,是JS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-10-10實(shí)現(xiàn)高性能JavaScript之執(zhí)行與加載
avaScript在瀏覽器中的性能,此問題因JavaScript的阻塞特征而復(fù)雜,也就是說JavaScript運(yùn)行時(shí)其他的事情不能被瀏覽器處理,事實(shí)上,大多數(shù)瀏覽器使用單進(jìn)程處理JavaScript運(yùn)行等多個(gè)任務(wù),而同一時(shí)間只能有一個(gè)任務(wù)被執(zhí)行。2016-01-01跨域請(qǐng)求的完美解決方法(JSONP, CORS)
下面小編就為大家?guī)?lái)一篇跨域請(qǐng)求的完美解決方法(JSONP, CORS)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2016-06-06setInterval()和setTimeout()的用法和區(qū)別示例介紹
setInterval()和setTimeout()想必大家并不陌生吧,接觸js的朋友都知道的,不過還是有一些新手朋友對(duì)兩者的用法不是很熟悉,下面簡(jiǎn)要的為大家介紹下2013-11-11javascript處理表單示例(javascript提交表單)
這篇文章主要介紹了javascript處理表單示例,處理 各種表單, 以及鏈接,按鈕的通用組件,需要的朋友可以參考下2014-04-04JavaScript中利用各種循環(huán)進(jìn)行遍歷的方式總結(jié)
這篇文章主要介紹了JavaScript中利用各種循環(huán)進(jìn)行遍歷的方式總結(jié),是JS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-11-11Javascript學(xué)習(xí)筆記9 prototype封裝繼承
在上文中,我利用prototype的原理做了一個(gè)封裝的New,然后我就想到,我是否可以用prototype的原理進(jìn)一步封裝面向?qū)ο蟮囊恍┗咎卣髂??比如繼承。2010-01-01