This question already has answers here:
Why is isNaN(null) == false in JS?

(9 个回答)


3年前关闭。




在 JavaScript 中
parseInt(null) 返回一个 NaNparseNumber(null) 也返回一个 NaNisNaN('abcd') 返回 true ,因为 'abcd' 当然不是数字,isNaN(5) 返回 false
但奇怪的是
isNaN(null) 返回 false ,这很奇怪,因为它暗示它是一个数字,但正如我们在 parseNumber 中看到的那样,它被视为 NaNparseIntisNaN 将 null 视为 NaN 而另一种将其视为 Number 的方式似乎不一致。为什么它们不一致?

最佳答案

isNaN() 中发生的第一件事是参数被强制转换为一个数字。也就是说,就好像函数看起来像:

function isNaN(n) {
    n = +n;
    // ...
}

null 被强制为一个数字时,值为 0 。那不是 NaN
isNaN 函数真的不应该用来测试一个值是否是数字;这不是它的目的。它用于测试一个数字——也就是说,你知道的某个数字——是否是 NaN

在现代运行时,有 Number.isNaN() ,它不执行该类型强制。当然,有了这个,null 仍然是
不是 NaN

关于Javascript isNaN 和 null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48332213/

10-11 23:41