You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何NaN无法与自身相等?关于NaN比较与类型判断的疑问

关于JavaScript中NaN的那些“反直觉”特性

嘿,这个问题问得特别到位——NaN绝对是JavaScript里最容易让人困惑的数值类型值之一,咱们把你的疑问逐个掰碎了说:

为什么Number(notNum) === NaN结果是false?

这是因为NaN是JavaScript里唯一一个和自身不相等的值,这是ECMAScript标准明确规定的特性。哪怕两个值都是NaN,用===或者==比较都会返回false,比如:

NaN === NaN; // false
NaN == NaN;  // 同样是false

所以你直接拿Number(notNum)(结果是NaN)和NaN做全等比较,自然会得到false。

那怎么正确判断一个值是不是NaN呢?有两种靠谱的方式:

  • 用ES6新增的Number.isNaN()方法:它只会对真正的NaN返回true,不会误判其他类型的非数值
  • 利用NaN的“自不等”特性:x !== x,只有当x是NaN时,这个表达式才会返回true

举个实际的例子:

const notNum = 'dfsd';
const result = Number(notNum);

console.log(Number.isNaN(result)); // true
console.log(result !== result);    // true

为什么typeof(Number(notNum)) === 'number'结果是true?

这又是一个容易混淆的点:NaN的类型本质上是number。它是数值类型里的一个特殊值,用来表示“无法表示的无效数值”——比如把字符串转成数值失败、0除以0这类操作的结果,都会得到NaN。所以用typeof检测时,它会返回'number',这完全符合JavaScript的类型定义。

总结一下:NaN虽然叫“非数值”,但它属于数值类型,而且永远不等于自身,判断它必须用专门的方法或者自不等的特性。

内容的提问来源于stack exchange,提问作者NewProgrammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:58:40