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

为何非数值传入parseInt/parseFloat后与NaN比较不相等?

JavaScript中判断NaN的误区与正确方法

在JavaScript里,你会遇到这样的问题:用parseInt("r")或parseFloat("r")处理非数值输入时,结果确实是NaN,但直接用===和NaN比较,返回的却是false,和预期不符。

代码及控制台输出

console.log(parseInt("r"), parseInt("r") === NaN)

NaN false

console.log(parseFloat("r"), parseFloat("r") === NaN)

NaN false

原因解析

这是因为NaN(非数值)是JavaScript中特殊的数值类型值,它的核心特性是不等于任何值,包括它自己。所以无论用===还是==运算符和NaN比较,结果永远是false。

正确的判断方式

  • 使用isNaN()函数:它会先将传入的参数转换为数值类型,再判断是否为NaN。示例:
    console.log(isNaN(parseInt("r"))) // 输出 true
    
  • 使用Number.isNaN()方法:ES6新增的方法,不会强制转换参数类型,仅严格判断参数本身是否为NaN,适合需要精准判断的场景。示例:
    console.log(Number.isNaN(parseInt("r"))) // 输出 true
    console.log(Number.isNaN("r")) // 输出 false
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:07:09