在 JavaScript 中如何检查变量是否是整数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (10)
  • 关注 (0)
  • 查看 (119)

如何检查变量是否是整数,如果不是,就抛出警告。我试过下面的方法,但是没用。

<html>
    <head>
        <script type="text/javascript">
            var data = 22;
            alert(NaN(data));
        </script>
    </head>
</html>
提问于
用户回答回答于

使用==操作符来处理(严格平等) 具体如下

if (data === parseInt(data, 10))
    alert("data is integer")
else
    alert("data is not an integer")
用户回答回答于

ECMA-262 6.0(ES6)标准包括来 Number.isInteger 功能。

为了增加对旧浏览器的支持,我强烈建议使用强大的社区支持的解决方案:

https://github.com/paulmillr/es6-shim

纯正 ES6 JS 填充库...

注意,这个库需要 ES5-shim,只需照着README.md执行即可。

用户回答回答于

若要检查是否是整型,需要:

if (+data===parseInt(data)) {return true} else {return false}

注意+在 data 前面(将字符串转换为数字),并用===表示准确对比。

以下是一些例子:

data=10
+data===parseInt(data)
true

data="10"
+data===parseInt(data)
true

data="10.2"
+data===parseInt(data)
false
用户回答回答于

首先,NaN是一个“数字”(是的,我知道它很奇怪,但是还是要遵循),而不是“函数”。

您需要检查变量的类型是否为数字,并检查整数I是否有余数。

alert(typeof data === 'number' && data%1 == 0);
用户回答回答于

你可以使用一个简单的正则表达式实现

function isInt(value) {

    var er = /^-?[0-9]+$/;

    return er.test(value);
}
用户回答回答于

使用时要小心

num % 1

空字符串(‘’)或布尔值(真或假)将返回为整数

false % 1 // true
'' % 1 //true

Number.isInteger(data)

Number.isInteger(22); //true
Number.isInteger(22.2); //false
Number.isInteger('22'); //false

浏览器的内建函数。不支持旧的浏览器。

替代品:

Math.round(num)=== num

但是,Math.round() 对于空字符串和布尔值也将失败。

用户回答回答于

Number.isInteger()似乎是用的方案。

MDN 还为不支持的浏览器提供了以下方案Number.isInteger(),主要是IE的所有版本。

MDN页面的链接

Number.isInteger = Number.isInteger || function(value) {
    return typeof value === "number" && 
           isFinite(value) && 
           Math.floor(value) === value;
};
用户回答回答于

您可以检查该数字是否有余数。

var data = 22;

if(data % 1 === 0){
   // yes it's an integer.
}

请注意,如果您的输入也可能是文本,而您想先检查是不是,那么您可以先检查类型:

var data = 22;

if(typeof data === 'number'){
     // yes it is numeric

    if(data % 1 === 0){
       // yes it's an integer.
    }
}
用户回答回答于

假设你对所讨论的变量一无所知,则应该采用以下方法:

if(typeof data === 'number') {
    var remainder = (data % 1);
    if(remainder === 0) {
        // yes, it is an integer
    }
    else if(isNaN(remainder)) {
        // no, data is either: NaN, Infinity, or -Infinity
    }
    else {
        // no, it is a float (still a number though)
    }
}
else {
    // no way, it is not even a number
}

简单点的话:

if(typeof data==='number' && (data%1)===0) {
    // data is an integer
}
用户回答回答于

这取决于你是否允许有可能的将字符串转化为整数

你可以这样做。

function isInt(value) {
  return !isNaN(value) && 
         parseInt(Number(value)) == value && 
         !isNaN(parseInt(value, 10));
}

使用按位操作

只需要简单的解析并处理即可

function isInt(value) {
  var x = parseFloat(value);
  return !isNaN(value) && (x | 0) === x;
}

短接,然后操作

function isInt(value) {
  if (isNaN(value)) {
    return false;
  }
  var x = parseFloat(value);
  return (x | 0) === x;
}

或者直接在一起处理

function isInt(value) {
  return !isNaN(value) && (function(x) { return (x | 0) === x; })(parseFloat(value))
}

测试:

isInt(42)        // true
isInt("42")      // true
isInt(4e2)       // true
isInt("4e2")     // true
isInt(" 1 ")     // true
isInt("")        // false
isInt("  ")      // false
isInt(42.1)      // false
isInt("1a")      // false
isInt("4e2a")    // false
isInt(null)      // false
isInt(undefined) // false
isInt(NaN)       // false

这是 Fiddle 链接:http://jsfiddle.net/opfyrqwp/28/

这是 yolpo 链接:http://www.yolpo.com/Embed.html?gist=a3c46f837ea7bbb708ae&autoplay=2

性能

测试表明,短接方案的性能最好(OPS/秒).

//   短接方法
function isInt(value) {
  var x;
  if (isNaN(value)) {
    return false;
  }
  x = parseFloat(value);
  return (x | 0) === x;
}

以下是一个性能对比:http://jsben.ch/#/htLVw

如果你想要一种更短的短接的形式:

function isInt(value) {
  var x;
  return isNaN(value) ? !1 : (x = parseFloat(value), (0 | x) === x);
}

当然,我建议让 minifier 来处理这个问题。

扫码关注云+社区

领取腾讯云代金券