繁体   English   中英

检查javascript中的数值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM