2012-01-19 39 views
1

我使用isNan functionto檢查,如果輸入的值是一個數字:的JavaScript isNaN功能

if(isNaN(num)) { 
    alert('I am not a number'); 
} 
else { 
// 
    } 

然而,如果輸入的數值,例如,「5748hh」這是可以理解像數,並返回false。哪裏不對?

+3

你需要在這個例子中正確關閉你的括號:)你在num之後缺少一個關閉)。 – Eirinn

+0

'isNaN(「5748hh」)=== true;'什麼不工作? – Raynos

回答

3

Mozilla的MDN

當參數傳遞給isNaN功能不是數字,其值將首先強制轉換爲一個數字。然後測試結果值以確定它是否爲NaN。因此,對於非數字,強制爲數字類型時會生成有效的非NaN數值(特別是空字符串和布爾基元,當強制數字值爲零或一時),「假」返回值可能是意外的;例如,空字符串肯定「不是數字」。這種混淆源於這個術語「不是數字」,對於表示爲IEEE-794浮點值的數字具有特定的含義。這個函數應該被解釋爲回答這個問題,「當這個值被強制爲一個數值時,這個值是IEEE-794'非數字'的值嗎?」

因此alert(isNaN('45345ll'))返回true,因爲它的值強制不同於parseInt/parseFloat轉換。

例如,

var num = false; 
console.log(isNaN(num));  /* return false because the coerced value is 0 but */ 
console.log(parseInt(num, 10)); /* return isNaN */ 

也許你得到意想不到的值,由於在if聲明中缺少括號

2

您必須首先嚐試解析它:

if(isNaN(parseInt(num, 10))) { 

按照documentation

由於isNaN功能規範的最早的版本,其非數值參數的行爲已混亂。 當isNaN函數的參數不是數字時,該值首先被強制爲。然後測試結果值以確定它是否爲NaN。因此,對於非數字的是,當在一個有效的非NaN的數值(特別是空字符串和布爾基元,其中,當威嚇給數值零或一)

強制轉換成數字類型的結果不同於parseInt()裹挾將導致非數字字符串,如5748hh,因此您看到的行爲。

+3

這實際上從字符串「5478hh」返回有效數字5748。 – zvona

+0

@zvona OP說*「5748hh」它可以理解,就像一個數字***所以從這裏我明白了樣本字符串應該返回數字'5748'。 –

+0

@ShadowWizard強制轉換與轉換不同,因此'5748aa'不是*強制*作爲數字,它不返回數字。看看我的例子 – fcalderan

0

isNaN("5748hh");返回true

0

我試過了,它給了我真實的。

alert(isNaN("123hh")); // - alert true. 

this JSfiddler

0

在我的螢火蟲:

>>> isNaN("5748hh") 
true 
2

如果你解析一個數字,你會成功的解析成數字開始的字符串,字符串的忽略其餘。例如parseInt('56sadfh', 10)將解析爲56。如果你想防止這個,你應該使用正則表達式來檢查輸入。例如

if (!num.match(/[0-9]+/)) { 
    alert("not a number"); 
} 
+0

使用'+'56sadfh'' – Raynos

+0

@Raynos我不明白你的意見。你什麼意思? –

+1

'parseInt('56sadfh',10)=== 56','+'56sadfh'是NaN'因此'isNan(+'56sadfh')'作品 – Raynos

0

isNaN =不是一個數字,所以如果它返回true,輸入的數據不是數字。

http://jsfiddle.net/8fMAr/

if(isNaN("5748hh")) 
{ 
    alert("not a number"); 
} 
else 
{ 
    alert("a number"); 
} 

返回true: 「不是一個數字」,它應該像。

0

NaN是一個特殊的數字。 isNaN(參數)函數檢查參數是否爲NaN值,但如果參數是一個字符串,則該參數也爲真,表示有效整數。