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

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

当前回答

这将解决另一个场景(121.),结束处有一个点

function isInt(value) {
        var ind = value.indexOf(".");
        if (ind > -1) { return false; }

        if (isNaN(value)) {
            return false;
        }

        var x = parseFloat(value);
        return (x | 0) === x;

    }

其他回答

答案中有很多选项。

isNaN对于纯整数来说可能很棘手,您仍然需要其他检查来使它过时。 Number.isInteger()在IE中不受官方支持(大多数人不会关心,但也有一些掉队者)。

最后我自己写了一些东西:

function isInteger(valueToCheck) {
    return typeof valueToCheck !== 'undefined'
        && (valueToCheck === parseInt(valueToCheck, 10));
}

Test

let undefinedValue;
const testValues = [
    1,
    '',
    undefinedValue,
    1.1,
    '1',
    '1.1',
    '1-2',
    'bob',
    false,
    [],
    [1],
    {},
    {foo: 1}
];

testValues.forEach(value => {
    console.log(`${value} - ${isInteger(value)}`);
})

结果:

1 - true
'' - false
undefined - false
1.1 - false
'1' - false
'1.1' - false
'1-2' - false
'bob' - false
false - false
[] - false
[1] - false
{} - false
{foo: 1} - false

一些测试值是多余的,但它们的存在只是清楚地表明没有任何东西通过。你可以省略函数中的未定义检查,但我发现在JS中未定义的东西可能会很奇怪,所以感觉更安全。

你可以使用这个函数:

function isInteger(value) {
    return (value == parseInt(value));
}

即使值是包含整数值的字符串,它也将返回true。 因此,结果将是:

alert(isInteger(1)); // true
alert(isInteger(1.2)); // false
alert(isInteger("1")); // true
alert(isInteger("1.2")); // false
alert(isInteger("abc")); // false

假设你对问题中的变量一无所知,你应该采用这种方法:

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
}

使用|运算符:

(5.3 | 0) === 5.3 // => false
(5.0 | 0) === 5.0 // => true

所以,一个测试函数可能是这样的:

var isInteger = function (value) {
  if (typeof value !== 'number') {
    return false;
  }

  if ((value | 0) !== value) {
    return false;
  }

  return true;
};

使用时要小心

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()对于空字符串和布尔值也会失败