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总是对我有用?
isNaN返回true如果传递的值不是数字(NaN) (或者如果它不能被转换为一个数字,因此,null,true和false将被转换为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)
| 归档时间: |
|
| 查看次数: |
418 次 |
| 最近记录: |