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

parseFloat('geoff') == NaN;

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

当前回答

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

其他回答

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

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

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

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

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

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

规则是:

NaN != NaN

isNaN()函数的问题是,在某些情况下,它可能会返回意想不到的结果:

isNaN('Hello')      //true
isNaN('2005/12/12') //true
isNaN(undefined)    //true
isNaN('NaN')        //true
isNaN(NaN)          //true
isNaN(0 / 0)        //true

检查该值是否真的为NaN的更好方法是:

function is_nan(value) {
    return value != value
}

is_nan(parseFloat("geoff"))

我在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

alert("1234567890.".indexOf(String.fromCharCode(mycharacter))>-1);

这并不优雅。但在尝试isNAN()后,我得到了这个解决方案,这是另一种选择。在这个例子中,我还允许'。'因为我正在为浮动进行屏蔽。您还可以反转此操作,以确保不使用任何数字。

("1234567890".indexOf(String.fromCharCode(mycharacter))==-1)

这是一个单个字符的求值,但您也可以循环遍历字符串以检查任何数字。