是什么导致NaN出现故障?

Sup*_*tar 4 javascript nan numerical-computing

我只是想评估一个输入是否是一个数字,并认为isNaN这是最好的方法.但是,这会导致不可靠的结果.例如,使用以下方法:

function isNumerical(value) {
    var isNum = !isNaN(value);
    return isNum ? "<mark>numerical</mark>" : "not numerical";
}
Run Code Online (Sandbox Code Playgroud)

在这些价值观上:

isNumerical(123));     // => numerical
isNumerical("123"));   // => numerical
isNumerical(null));    // => numerical
isNumerical(false));   // => numerical
isNumerical(true));    // => numerical
isNumerical());        // => not numerical
Run Code Online (Sandbox Code Playgroud)

在这个小提琴中显示:http://jsfiddle.net/4nm7r/1

为什么不isNaN总是对我有用?

Nic*_*ngo 5

isNaN返回true如果传递的值不是数字(NaN) (或者如果它不能被转换为一个数字,因此,null,truefalse将被转换为0),否则返回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";
}
Run Code Online (Sandbox Code Playgroud)