我只在Firefox的JavaScript控制台中尝试过,但以下语句都没有返回true:

parseFloat('geoff') == NaN;

parseFloat('geoff') == Number.NaN;

当前回答

我创建了这个小函数,它就像一个咒语。 而不是检查NaN,这似乎是违反直觉的,你检查一个数字。我很确定我不是第一个这样做的人,但我想分享一下。

function isNum(val){
    var absVal = Math.abs(val);
    var retval = false;
    if((absVal-absVal) == 0){
        retval = true
    }

    return retval;
}

其他回答

两种都试试看

if(isNaN(parseFloat('geoff'))  && typeof(parseFloat('geoff')) === "number");
//true

简单地将结果转换为String并与'NaN'进行比较。

var val = Number("test");
if(String(val) === 'NaN') {
   console.log("true");
}

NaN是一个特殊的值,不能这样测试。我想和大家分享一个有趣的事情

var nanValue = NaN;
if(nanValue !== nanValue) // Returns true!
    alert('nanValue is NaN');

这只对NaN值返回true,是一种安全的测试方式。肯定应该被包装在一个函数中,或者至少被注释,因为测试相同的变量是否彼此不相等显然没有多大意义,呵呵。

我在StackOverflow上写了另一个问题的答案,当NaN == null时,另一个检查,但它被标记为重复,所以我不想浪费我的工作。

看看关于NaN的Mozilla开发者网络。


简短的回答

只要使用距离|| 0当你想确保你的值是一个正确的数字或isNaN()检查它。

长回答

NaN (Not-a-Number)是javascript中一个奇怪的全局对象,当某些数学操作失败时,经常返回。

你想检查NaN == null,结果是false。然而,即使NaN == NaN结果为假。

判断变量NaN是否为全局函数的一个简单方法是NaN()。

另一个是x !== x,仅当x为NaN时才成立。(感谢提醒@raphael-schweikert)

但为什么这个简短的答案管用呢?

让我们一探究竟。

当你调用NaN == false时,结果是假的,NaN == true也是一样。

在规范中,JavaScript有一个总是false值的记录,包括:

NaN -不是一个数字 "" -空字符串 False -布尔值为False Null - Null对象 Undefined -未定义的变量 0 -数字0,包括+0和-0

NaN === NaN;        // false
Number.NaN === NaN; // false
isNaN(NaN);         // true
isNaN(Number.NaN);  // true

相等运算符(==和===)不能用于测试NaN的值。

全局NaN属性是一个表示Not-A-Numbe的值

最好的方法是使用'isNaN()',这是一个内置函数来检查NaN。所有浏览器都支持这种方式。