parseInt()检查NaN无法正常工作

时间:2016-02-08 17:32:48

标签: javascript

我正在研究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是包含文字的字符串,它仍然会将parseInt(val) !== NaN作为true返回。我后来使用Chrome控制台进行了测试,这就是我得到的:

incorrect return

如您所见,'asf'Not-a-Number。但是只要它返回true,它就会返回false,并且只要它返回false,它就会返回true。您还可以看到我测试过以确保NaN实际上不是字符串。

correct return

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

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

2 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:1)

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