2013-01-02 108 views
3

我可以使用JavaScript編寫isNan()函數嗎? JavaScript可以檢查變量是否爲NaN而沒有原生isNaN函數?是否可以在不使用isNaN的情況下檢測NaN?

這是一個面試問題。

+3

是。 'NaN'在平等使用時有什麼特性? < - :-) – 2013-01-02 19:08:41

+1

考慮此一提示從一個很好的訪問者@pst'一個= NaN' '的typeof A' =>' 「數量」'' A' !! = >'FALSE' ' b = 0' 'typeof b' =>'「number」' '!! b' =>'false' – Mohsen

+1

真的夠了......但是在那裏沒有使用等號運算符(例如'==')。我所考慮的平等表達通常會被視爲一種重言式*。 – 2013-01-02 19:12:46

回答

12

如果它是一個數字,並且不等於它自己,它是NaN。

注意:正如@pst指出的那樣,數字約束是不必要的。 NaN似乎是JS!=本身中唯一的值。

+0

@pst你可能是對的,讓我考慮一下。 –

+0

@pst對象不等於相同的對象,(至少和'=='操作符一樣多)。 –

+2

這可能是有用的:http://jsfiddle.net/SdMSS/ – Shmiddty

1

對這個問題的完整解決方案:

var is_NaN = function(n) { 

    return (n !== n); 
} 

is_NaN(1/'a'); // true 
isNaN(1/'a'); // true 

因爲在JavaScript NaN不等於本身。一種表達NaN === NaN總是返回false

第二種方案:

您可以使用內置的isFinite功能。 isFinite檢查輸入是否是的數字既不是Infinity也不是NaN

isFinite(NaN) // false 
isFinite(Infinity) // false 
isFinite(1) // true 
isFinite(true) // true, because argument true is equal to 1 
isFinite('a') // false 
isFinite(1/'a') // false 
+1

儘管這段代碼可能解決這個問題,[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高您的質量帖子。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 - [來自評論](https://stackoverflow.com/review/low-quality-posts/12012003) – Ferrybig

相關問題