为何非数值传入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
相关产品推荐
相关产品推荐

