我如何检查如果一个变量是一个整数在JavaScript,并抛出一个警告,如果它不是?我试过了,但不管用:

<html>
    <head>
        <script type="text/javascript">
            var data = 22;
            alert(NaN(data));
        </script>
    </head>
</html>

当前回答

为什么没有人提到Number.isInteger() ?

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger

为我完美地工作,并解决了NaN开始一个数字的问题。

其他回答

检查变量是否等于相同的变量四舍五入为整数,就像这样:

if(Math.round(data) != data) {
    alert("Variable is not an integer!");
}

你可以tryNumber.isInteger(Number(value))如果value可能是一个字符串形式的整数,例如var value = "23",你想要这个值为true。避免尝试Number.isInteger(parseInt(value)),因为这并不总是返回正确的值。例如,如果var value = "23abc",并且你使用parseInt实现,它仍然会返回true。

但是如果你想要严格的整数值,那么可能Number.isInteger(value)就可以了。

你可以使用regexp:

function isInteger(n) {
    return (typeof n == 'number' && /^-?\d+$/.test(n+''));
}

如果你的浏览器支持,Number.isInteger()是最好的方法,如果不支持,我认为有很多方法:

function isInt1(value){
  return (value^0) === value
}

or:

function isInt2(value){
  return (typeof value === 'number') && (value % 1 === 0); 
}

or:

function isInt3(value){
  return parseInt(value, 10) === value; 
}

or:

function isInt4(value){
  return Math.round(value) === value; 
}

现在我们可以测试结果:

var value = 1
isInt1(value)   // return true
isInt2(value)   // return true
isInt3(value)   // return true
isInt4(value)   // return true

var value = 1.1
isInt1(value)   // return false
isInt2(value)   // return false
isInt3(value)   // return false
isInt4(value)   // return false

var value = 1000000000000000000
isInt1(value)   // return false
isInt2(value)   // return true
isInt3(value)   // return false
isInt4(value)   // return true

var value = undefined
isInt1(value)   // return false
isInt2(value)   // return false
isInt3(value)   // return false
isInt4(value)   // return false

var value = '1' //number as string
isInt1(value)   // return false
isInt2(value)   // return false
isInt3(value)   // return false
isInt4(value)   // return false

所有这些方法都可以,但当数字很大时,parseInt和^ operator就不能很好地工作了。

使用时要小心

num % 1

空字符串(")或布尔值(真或假)将返回为整数。你可能不想这么做

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

Number.isInteger(数据)

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

内置功能在浏览器中。不支持旧浏览器

选择:

Math.round(num)=== num

然而,Math.round()对于空字符串和布尔值也会失败