關(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()名字相同,但是語義卻不完全相同,在一定意義上會(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 )或無法表示(unrepresentable )的值,尤其是浮點(diǎn)數(shù)計(jì)算值。
因此,isNaN(null) == false 在語義上是正確的,因?yàn)閚ull不是NaN(事實(shí)上null、ture/false等等會(huì)先轉(zhuǎn)為數(shù)字0)。但是如果用!isNaN()來判斷傳入的值可否轉(zhuǎn)換為數(shù)字,又不大恰當(dāng)。而Javascript另一種方式 typeof num == 'number' 則無法檢測(cè)字符串情況。因此如果不使用 jQuery $.isNumeric(),則最好還是重寫一個(gè)方法判斷,比如用正則來判斷或者:
function isNumeric(obj) {
return !isNaN(parseFloat(obj)) && isFinite(obj);
}
相關(guān)文章
JavaScript實(shí)現(xiàn)關(guān)鍵字高亮功能
關(guān)鍵詞高亮技術(shù)各大CMS基本上都有,但基本都是后端代碼來實(shí)現(xiàn)的,今天我們探討下如何使用javascript來實(shí)現(xiàn)代碼高亮技術(shù)。2014-11-11
JavaScript 高級(jí)篇之DOM文檔,簡(jiǎn)單封裝及調(diào)用、動(dòng)態(tài)添加、刪除樣式(六)
學(xué)習(xí)是有趣的,但有過濾的學(xué)習(xí)內(nèi)容就更好,本博主就專門為剛接觸javascript客戶端編程的朋友提供及分享個(gè)人學(xué)習(xí)經(jīng)歷!建議大家看看:(湯姆大叔的博客)2012-04-04
JavaScript中數(shù)組的合并以及排序?qū)崿F(xiàn)示例
這篇文章主要介紹了JavaScript中數(shù)組的合并以及排序?qū)崿F(xiàn)示例,是JavaScript入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-10-10
JavaScript bold方法入門實(shí)例(把指定文字顯示為粗體)
這篇文章主要介紹了JavaScript字符串對(duì)象的bold方法入門實(shí)例,bold方法用于把指定文字顯示為粗體,需要的朋友可以參考下2014-10-10
js中的鼠標(biāo)事件有哪些(用法示例學(xué)習(xí)進(jìn)階)
在JavaScript中,鼠標(biāo)事件是 Web 開發(fā)中最常用的事件類型。鼠標(biāo)點(diǎn)擊事件包括 4 個(gè):click(單擊)、dblclick(雙擊)、mousedown(按下)和 mouseup(松開)。其中 click 事件類型比較常用,而 mousedown和mouseup事件類型多用在鼠標(biāo)拖放、拉伸操作中。2023-02-02

