检查javascript中的数值

时间:2014-10-23 10:52:40

标签: javascript numbers

我在线阅读教程说明: 实际上,最可靠的转换检查是regexp或isNumeric:

function isNumeric(n) {
  return !isNaN(parseFloat(n)) && isFinite(n)
}

我的问题是为什么这个功能不能简化为:

  function isNumeric(n) {
      return isFinite(n)
  }

3 个答案:

答案 0 :(得分:2)

因为isFinite(n)将对非数字值返回true,例如:

alert(isFinite(false)); // displays true

答案 1 :(得分:2)

  

我的问题是为什么这个功能不能简化为:

function isNumeric(n) {
   return isFinite(n)
}

如果有任何机会parseFloat可能不是一个开头的数字,那么你不能,不,你想要n。但它可以简化为:

function isNumeric(n) {
    return isFinite(parseFloat(n));
}

...因为isFinite(NaN)是假的,无论如何,这是你的函数为不可解析的数字返回的。

值得注意的是,parseFloat将停留在第一个无效字符并返回它找到的任何数字,因此parseFloat("123abc")123,而不是NaN。如果要验证整个字符串是否可以正确解析为浮点,请使用+Number()

function isNumeric(n) {
    return isFinite(+n); // Or: return isFinite(Number(n));
}

现在,如果您确定n 总是已经是一个数字(不是布尔值或字符串或其他内容),那么是的,您可以跳过解析阶段。

答案 2 :(得分:0)

唔,你不能使用是有限的,因为只有有限数才会返回真。

例如isFinite(1/0)返回false。

Infinity是一个数字,它不是有限的。

我建议查看大型图书馆如何做到这一点:

<强> 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]';
}