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

parseFloat('geoff') == NaN;

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

当前回答

发现这很有用

    // 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,这似乎是违反直觉的,你检查一个数字。我很确定我不是第一个这样做的人,但我想分享一下。

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

    return retval;
}

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

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(value)函数调用,因为:

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

例子:

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

我希望这对你有所帮助。

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

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