parseInt() 检查 NaN 工作不正常 [重复]

Posted

技术标签:

【中文标题】parseInt() 检查 NaN 工作不正常 [重复]【英文标题】:parseInt() check for NaN isn't working properly [duplicate] 【发布时间】:2016-05-18 11:26:39 【问题描述】:

我正在开发一个 jQuery 插件,我需要确保这个值是一个数字,或者一个只有数字的字符串。为此,我编写了以下代码,其中val 是一个变量,可能是也可能不是数字。

if (typeof val !== 'number') //if "val" isn't a number
    if (typeof val === 'string' && parseInt(val) !== NaN) //see if "val" is a string with only a number
        val = parseInt(val);
    

但由于某种原因,在测试时,即使val 是带有文本的字符串,它仍然会以true 的形式返回parseInt(val) !== NaN。后来我用 Chrome 控制台进行了测试,这就是我得到的:

如您所见,'asf'Not-a-Number。但是无论它返回true,它应该返回false,无论它返回false,它应该返回true。您还可以看到,我进行了测试以确保 NaN 实际上不是字符串。

上面你可以看到返回值是一样的,但是这次是正确的。

我错过了什么吗?或者我应该以不同的方式做到这一点?

【问题讨论】:

你看过isNaN()吗? @Evilzebra 我不知道这存在。谢谢! 查看方式为isNaN()方法 也相关,为什么NaN !== NaN 【参考方案1】:

检查值是否为数字的最佳解决方案是使用isNaN()。

【讨论】:

【参考方案2】:

NaN 不是你可以比较的。 你需要使用:

isNaN(parseInt('asf')) // true

isNaN(parseInt('123')) // false

【讨论】:

我希望您的声誉能通过这个简单的答案快速增长。惊人的 !恭喜。

以上是关于parseInt() 检查 NaN 工作不正常 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

parseInt 总是返回 NaN?

为啥我在使用 parseINt 或 undefined 时得到 NaN?

检查用户输入是不是为 NaN [重复]

为啥 parseInt(8,3) == NaN 和 parseInt(16,3) == 1?

NaN不等于NaN

为啥 parseInt 使用 Array#map 产生 NaN?