2016-01-27 100 views
1

我有一個函數來測試,如果提示輸入一個數字,就像這樣:javascript isNaN()函數不工作?

function myFunction() 
{ 
    var person = prompt("Please enter your name", ""); 

    if (person != null) 
    { 
     if(isNaN(person)) 
     { 
      document.write("hello " + person + "<br><br>"); 
     } 
     else 
      document.write("You gave me a number"); 

    } 
    else 
    { 
     document.write("You didn't answer.<br><br>"); 
    } 
} 

但我每次輸入一個數字它使輸出打招呼+數時間。我一直在使用這個功能很長一段時間,這對我來說沒有意義,它似乎應該工作。爲什麼人迴歸真實?

+1

嘗試用'console.log'替換所有'document.write'調用並查看會發生什麼。然後閱讀['document.write'](https://developer.mozilla.org/en-US/docs/Web/API/Document/write)是如何工作的。 – j08691

+1

我無法重現這一點。你使用的是什麼瀏覽器? –

+0

僅僅因爲它不是'NaN'或'null'並不意味着它是一個整數... – War10ck

回答

1

isNaN函數檢查值是否爲NaN。 NaN是在進行需要非數字號碼的操作時發生的值。請參閱documentation。 但是函數不是檢查值是否爲類型編號。過檢查,如果值是型號使用typeof操作

typeof person === 'number' 
2

NaN is a special value in JavascriptisNaN所做的是檢查傳遞的值是否等於*這個特殊值。如果您要檢查,如果事情是,比方說,而不是數字流,你可以使用正則表達式:

if (!/^\d+(\.\d+)?/.exec(person)) { 

或分析值爲數字,看看它是否轉換回相同的字符串:

var n = parseFloat(person); 
if (n.toString() !== person) { 

*有一個原因,我們不使用===,但它超出了這個答案的範圍。

+0

你也可以使用'if(x!= x){...}'來檢查'NaN',它只適用於'NaN' ... – War10ck