javascript isNaN()函数无法正常工作?

时间:2016-01-27 21:11:05

标签: javascript

我有一个函数来测试提示输入是否是一个数字,如下所示:

function myFunction() 
{
    var person = prompt("Please enter your name", "");

    if (person != null) 
    {
        if(isNaN(person))
        {
            document.write("hello " + person + "<br><br>");
        }
        else
            document.write("You gave me a number");

    }
    else
    {
        document.write("You didn't answer.<br><br>");
    }
}

但每次输入数字时都会输出hello +数字。我已经搜索了这个功能很长一段时间了,这对我来说没有意义,似乎它应该有效。为什么人回归真实?

3 个答案:

答案 0 :(得分:3)

NaN is a special value in JavascriptisNaN做的是检查传递的值是否等于此特殊值。如果你想检查某些东西是不是数字流,你可以使用正则表达式:

if (!/^\d+(\.\d+)?/.exec(person)) {

或者将值解析为数字,看它是否转换回相同的字符串:

var n = parseFloat(person);
if (n.toString() !== person) {

*我们不使用===是有原因的,但这超出了这个答案的范围。

答案 1 :(得分:1)

isNaN函数检查值是否为NaN。 NaN是在进行需要非数字的数字的操作时发生的值。请参阅documentation。 但是,函数检查值是否为类型编号。要检查值是否为类型编号,请使用typeof运算符

typeof person === 'number'

答案 2 :(得分:-1)

您的代码是使用isNaN方法的正确方法。但是,对于任何其他阅读此文章的人,我都看到了一个奇怪的异常,其中记录在案的IsNaN的使用无法正常工作,我通过将parseInt方法与IsNaN方法结合使用解决了这个问题。根据W3c网站(https://www.w3schools.com/jsref/jsref_isnan.asp),IsNan('123')应该返回false,而IsNan('g12')应该返回true,但是我看到的情况并非如此。 如果您无法使用已记录的方法,请尝试以下代码:

var unitsToAdd = parseInt($('#unitsToAdd').val());
if(isNaN(unitsToAdd)) {
    alert('not a number');
    $('#unitsToAdd').val('1');
    returnVal = false;
}

或者,您也可以尝试这种经过良好测试的方法。

function isNumber(searchValue) {
    var found = searchValue.search(/^(\d*\.?\d*)$/);
    //Change to ^(\d*\.?\d+)$ if you don't want the number to end with a . such as 2.
    //Currently validates .2, 0.2, 2.0 and 2.
    if(found > -1) {
        return true;
    }
    else {
        return false;
    }
}

希望这会有所帮助。