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

parseFloat('geoff') == NaN;

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

当前回答

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

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

其他回答

我刚刚在《有效JavaScript》这本书中看到了这个技巧,它非常简单:

因为NaN是唯一被视为与自身不相等的JavaScript值,你总是可以通过检查它是否与自身相等来测试一个值是否为NaN:

var a = NaN;
a !== a; // true 

var b = "foo";
b !== b; // false 

var c = undefined; 
c !== c; // false

var d = {};
d !== d; // false

var e = { valueOf: "foo" }; 
e !== e; // false

直到@allsyed评论才意识到这一点,但这在ECMA规范中:https://tc39.github.io/ecma262/#sec-isnan-number

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

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

你应该使用全局isNaN(value)函数调用,因为:

支持跨浏览器 有关文档,请参阅isNaN

例子:

 isNaN('geoff'); // true
 isNaN('3'); // false

我希望这对你有所帮助。

发现这很有用

    // Long-hand const isFalsey = (value) => {   if (
        value === null ||
        value === undefined ||
        value === 0 ||
        value === false ||
        value === NaN ||
        value === ""   ) {
        return true;   }   return false; };
 // Short-hand const 
      isFalsey = (value) => !value;
NaN === NaN;        // false
Number.NaN === NaN; // false
isNaN(NaN);         // true
isNaN(Number.NaN);  // true

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

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

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