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

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

当前回答

ECMA-262 6.0 (ES6)标准包括编号。isInteger函数。

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

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

这是一个纯粹的ES6 JS polyfills库。

注意,这个库需要es5-shim,只需遵循README.md即可。

其他回答

你可以使用regexp:

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

试试下面的功能:

function isInteger (num) {
    return num == parseInt(+num,10)  && !isNaN(parseInt(num));
}

console.log ( isInteger(42));        // true
console.log ( isInteger("42"));      // true
console.log ( isInteger(4e2));       // true
console.log ( isInteger("4e2"));     // true
console.log ( isInteger(" 1 "));     // true
console.log ( isInteger(""));        // false
console.log ( isInteger("  "));      // false
console.log ( isInteger(42.1));      // false
console.log ( isInteger("1a"));      // false
console.log ( isInteger("4e2a"));    // false
console.log ( isInteger(null));      // false
console.log ( isInteger(undefined)); // false
console.log ( isInteger(NaN));       // false    
console.log ( isInteger(false));       // false
console.log ( isInteger(true));       // false
console.log ( isInteger(Infinity));       // false

检查像poster这样的整数是否需要:

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

此外,Number.isInteger()。也许Number.isSafeInteger()是这里使用es6指定的另一个选项。

在es6之前的浏览器中填充Number.isSafeInteger(..):

Number.isSafeInteger = Number.isSafeInteger || function(num) {
    return typeof num === "number" && 
           isFinite(num) && 
           Math.floor(num) === num &&
           Math.abs( num ) <= Number.MAX_SAFE_INTEGER;
};

“公认的”答案是错误的(如下面的一些评论所指出的)。 这个修改可以使它工作:

if (data.toString() === parseInt(data, 10).toString())
    alert("data is a valid integer")
else
    alert("data is not a valid integer")