2013-01-02 110 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

相关问题