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

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

当前回答

在经历了几次成功和失败之后,我想出了这个解决方案:

const isInt = (value) => {
  return String(parseInt(value, 10)) === String(value)
}

我喜欢上面的想法,检查不是NaN的值并使用parseFloat,但当我在React基础设施中尝试它时,由于某些原因它不起作用。

编辑: 我找到了一个不用字符串的更好的方法:

var isInt = function (str) {
  return str === '0' || !!~~str;
}

我认为这是最简短的答案。也许是最有效的,但我可以更正一下。:)

其他回答

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

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

在经历了几次成功和失败之后,我想出了这个解决方案:

const isInt = (value) => {
  return String(parseInt(value, 10)) === String(value)
}

我喜欢上面的想法,检查不是NaN的值并使用parseFloat,但当我在React基础设施中尝试它时,由于某些原因它不起作用。

编辑: 我找到了一个不用字符串的更好的方法:

var isInt = function (str) {
  return str === '0' || !!~~str;
}

我认为这是最简短的答案。也许是最有效的,但我可以更正一下。:)

使用|运算符:

(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;
};

在ES6中,为数字对象添加了2个新方法。

其中Number.isInteger()方法如果参数为整数则返回true,否则返回false。

重要注意:对于可以表示为整数的浮点数,该方法也将返回true。例如:5.0(因为它恰好等于5)

用法示例:

Number.isInteger(0);         // true
Number.isInteger(1);         // true
Number.isInteger(-100000);   // true
Number.isInteger(99999999999999999999999); // true

Number.isInteger(0.1);       // false
Number.isInteger(Math.PI);   // false

Number.isInteger(NaN);       // false
Number.isInteger(Infinity);  // false
Number.isInteger(-Infinity); // false
Number.isInteger('10');      // false
Number.isInteger(true);      // false
Number.isInteger(false);     // false
Number.isInteger([1]);       // false

Number.isInteger(5.0);       // true
Number.isInteger(5.000000000000001); // false
Number.isInteger(5.0000000000000001); // true

这将解决另一个场景(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;

    }