關於jQuery $.isNumeric vs. $.isNaN vs. isNaN

來源:互聯網
上載者:User

在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 字元串、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);
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.