[英]Check numeric value in javascript
我在网上阅读了教程:实际上,最可靠的转换检查是regexp或isNumeric:
function isNumeric(n) {
return !isNaN(parseFloat(n)) && isFinite(n)
}
我的问题是为什么这个功能不能简化为:
function isNumeric(n) {
return isFinite(n)
}
因为isFinite(n)将对非数字值返回true,例如:
alert(isFinite(false)); // displays true
我的问题是为什么这个功能不能简化为:
function isNumeric(n) { return isFinite(n) }
它不能,不,你想要那里的parseFloat
,如果有任何机会n
可能不是一个数字开始。 但它可以简化为:
function isNumeric(n) {
return isFinite(parseFloat(n));
}
...因为isFinite(NaN)
是false,这就是你的函数无论如何都返回了无法解析的数字。
值得注意的是, parseFloat
将停在第一个无效字符并返回它找到的任何数字,因此parseFloat("123abc")
是123
,而不是NaN
。 如果要验证整个字符串是否可以正确解析为浮点,请使用+
或Number()
:
function isNumeric(n) {
return isFinite(+n); // Or: return isFinite(Number(n));
}
现在,如果您确定n
将始终是一个数字(不是布尔值或字符串或其他东西),那么是的,您可以跳过解析阶段。
好吧,不,你不能使用是有限的,因为只会返回有限数字的真。
例如isFinite(1/0)
返回false。
无限是一个数字,它不是有限的。
我建议看一下大型图书馆如何做到这一点:
jQuery的
isNumeric: function( obj ) {
// parseFloat NaNs numeric-cast false positives (null|true|false|"")
// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
// subtraction forces infinities to NaN
return obj - parseFloat( obj ) >= 0;
}
Underscore.js
function isNumber(obj) {
return toString.call(obj) == '[object Number]';
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.