导致NaN故障的原因是什么?

这个问题在这里已经有了答案:

  • 验证JavaScript中的十进制数 - IsNumeric()48回答

  • 如果传递的值不是数字(NaN) (或者它不能被转换为数字,那么nulltruefalse将被转换为0 ), isNaN将返回true ,否则返回false 。 在你的情况下,你必须删除! 在函数调用之前!

    理解脚本的行为是非常容易的。 isNaN只是检查一个值是否可以转换为int。 要做到这一点,你只需要乘以或除以1,或者减去或加0.在你的情况下,如果你这样做,在你的函数中, alert(value * 1); 你会看到所有通过的值将被一个数字(0,1,123)取代,除了undefined ,其数值是NaN

    你不能比较任何值到NaN因为它永远不会返回false(甚至NaN === NaN ),我认为这是因为NaN是动态生成的......但我不确定。

    无论如何,只要这样做就可以修复你的代码:

    function isNumerical(value) {
        var isNum = !isNaN(value / 1); //this will force the conversion to NaN or a number
        return isNum ? "<mark>numerical</mark>" : "not numerical";
    }
    

    你的三元语句是落后的,如果!isNaN()返回true,你想说"numerical"

    return isNum ? "not numerical" : "<mark>numerical</mark>";
    

    应该:

    return isNum ? "<mark>numerical</mark>" : "not numerical";
    

    查看更新的小提琴:

    http://jsfiddle.net/4nm7r/1/


    现在您已经修复了在其他答案中指出的反转逻辑,请使用parseFloat来排除truefalsenull false

    var isNum = !isNaN(parseFloat(value));
    

    请记住parseFloat的以下几种输出:

    parseFloat("200$"); // 200
    parseFloat("200,100"); // 200
    parseFloat("200 foo"); // 200
    parseFloat("$200"); // NaN
    

    (即,如果字符串以数字开头,则parseFloat将提取它可以找到的第一个数字部分)

    链接地址: http://www.djcxy.com/p/26403.html

    上一篇: What causes isNaN to malfunction?

    下一篇: How to write isNumber() in JavaScript?