【问题标题】:NaN in JavascriptJavascript 中的 NaN
【发布时间】:2026-01-07 02:20:03
【问题描述】:

在 Javascript 中,我发现了这个:

if (!NaN)
     console.log('do sth');

这段代码有效,但如果我写:

if (NaN)
     console.log('do sth');

这个不行。我真的不明白这背后的逻辑。

【问题讨论】:

  • NaN 是假的。 *.com/questions/22600248/…。如果你想检查某个东西是否为 NaN,有一个特殊的函数叫做 isNaN developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • “我真的不明白这背后的逻辑” - 即使不知道 NaN 是什么代码也有意义,因为如果 !something 为真,那么逻辑上 @987654326 @ 是假的。所以(同样,即使不知道 NaN 是什么)你会期望执行这些 console.log() 语句中的一个而不是另一个......

标签: javascript nan


【解决方案1】:

NaN 是 JavaScript 中的一个特殊数字,用于表示非法数字,也就是 Not-A-Number,例如尝试将数字与字符串相乘时等。

现在,在 JS 中,有falsy values 的概念。如您所见,NaN 被归类为虚假值。

这就是为什么当您执行以下操作时:

if(NaN) {
  console.log("something");
}

..它不起作用,因为NaN 被评估为假。因此,类似地,if(!NaN) 条件的计算结果为真。

【讨论】:

  • “NaN 是一个特殊的数字”是什么意思? NaN 的意思是“不是数字”,所以它绝对不是数字,尤其不是“特殊数字”。
  • 如果您检查typeof NaN 的值,您将得到"number"。同样,如果您检查NaN.constructor.name 的输出,您将得到"Number"。因此,为什么我说这是一个特殊的数字。
  • @RocoCTZ - 试试typeof NaN。你会看到它是一个“数字”。
  • 谢谢大火。现在我了解了虚假值部分。以前从未听说过。