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

parseFloat('geoff') == NaN;

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

当前回答

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

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

例子:

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

我希望这对你有所帮助。

其他回答

MDN的parseFloat页面中提到了另一个解决方案

它提供了一个过滤器函数来执行严格的解析

var filterFloat = function (value) {
    if(/^(\-|\+)?([0-9]+(\.[0-9]+)?|Infinity)$/
      .test(value))
      return Number(value);
  return NaN;
}


console.log(filterFloat('421'));               // 421
console.log(filterFloat('-421'));              // -421
console.log(filterFloat('+421'));              // 421
console.log(filterFloat('Infinity'));          // Infinity
console.log(filterFloat('1.61803398875'));     // 1.61803398875
console.log(filterFloat('421e+0'));            // NaN
console.log(filterFloat('421hop'));            // NaN
console.log(filterFloat('hop1.61803398875'));  // NaN

然后你可以用isNaN来检查它是否是NaN

试试下面的代码:

isNaN(parseFloat("geoff"))

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

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

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

准确的检查方法是:

//takes care of boolen, undefined and empty

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

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

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