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

parseFloat('geoff') == NaN;

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

当前回答

准确的检查方法是:

//takes care of boolen, undefined and empty

isNaN(x) || typeof(x) ==='boolean' || typeof(x) !=='undefined' || x!=='' ? 'is really a nan' : 'is a number'

其他回答

似乎在Node.js中,isNaN()是不被开箱即用的。 我曾经和

var value = 1;
if (parseFloat(stringValue)+"" !== "NaN") value = parseFloat(stringValue);

找到了另一种方法,只是为了好玩。

function IsActuallyNaN(obj) {
  return [obj].includes(NaN);  
}

试试下面的代码:

isNaN(parseFloat("geoff"))

要检查是否有任何值是NaN,而不仅仅是数字,请参阅这里:如何在Javascript中测试NaN ?

如果您的环境支持ECMAScript 2015,那么您可能需要使用Number。isNaN来确保这个值真的是NaN。

isNaN的问题是,如果你将它用于非数值数据,就会应用一些令人困惑的规则(根据MDN)。例如,

isNaN(NaN);       // true
isNaN(undefined); // true
isNaN({});        // true

因此,在ECMA Script 2015支持的环境中,您可能希望使用

Number.isNaN(parseFloat('geoff'))

对此我看到了一些回应,

但我只用:

function isNaN(x){
     return x == x && typeof x == 'number';
}