在jQuery中,有幾種方式可以判斷一個對象是否是數字,或者可否轉換為數字。
首先,jQuery.isNaN()在最新版本中已經被移除了(1.7之後),取而代之的是 jQuery.isNumeric ()。這並不奇怪,因為jQuery.isNaN() 同Javascript內置的isNaN()名字相同,但是語義卻不完全相同,在一定意義上會造成歧義。 jQuery.isNumeric ()有著與其相似的功能,同時也解決了歧義問題。
jQuery.isNumeric ()檢查傳進的參數是否是數字或者可否轉換為數字;Javascript 內置的isNaN() 檢查傳進的參數是否是一個合法的數字,典型的例子是0/0。
具體區別可以看測試:
測試數據:
復制代碼 代碼如下:
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() 結果是一樣的, 而 jQuery $.isNumeric() 同Javascript 自帶的!isNaN()在對空字符串、null、true/false、Infinity的處理是不同的。因為isNaN()只是檢查傳入的值是否是NaN類型。
NaN (Not a Number)是一個數字數據類型,表明未定義(undefined )或無法表示(unrepresentable )的值,尤其是浮點數計算值。
因此,isNaN(null) == false 在語義上是正確的,因為null不是NaN(事實上null、ture/false等等會先轉為數字0)。但是如果用!isNaN()來判斷傳入的值可否轉換為數字,又不大恰當。而Javascript另一種方式 typeof num == 'number' 則無法檢測字符串情況。因此如果不使用 jQuery $.isNumeric(),則最好還是重寫一個方法判斷,比如用正則來判斷或者:
復制代碼 代碼如下:
function isNumeric(obj) {
return !isNaN(parseFloat(obj)) && isFinite(obj);
}