如何在 JavaScript 中检查变量是否为整数,如果不是则抛出警报?我试过这个,但它不起作用:
<html>
    <head>
        <script type="text/javascript">
            var data = 22;
            alert(NaN(data));
        </script>
    </head>
</html>
如何在 JavaScript 中检查变量是否为整数,如果不是则抛出警报?我试过这个,但它不起作用:
<html>
    <head>
        <script type="text/javascript">
            var data = 22;
            alert(NaN(data));
        </script>
    </head>
</html>
这取决于,您是否也想将字符串也转换为潜在的整数?
这将:
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
这是小提琴:http : //jsfiddle.net/opfyrqwp/28/
测试表明,短路解决方案具有最佳性能(操作数/秒)。
// Short-circuiting, and saving a parse operation
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);
}
当然,我建议让压缩器来处理。
使用 === 运算符(严格相等)如下,
if (data === parseInt(data, 10))
    alert("data is integer")
else
    alert("data is not 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
}
Number.isInteger() 似乎是要走的路。
MDN 还为不支持的浏览器提供了以下 polyfill Number.isInteger(),主要是所有版本的 IE。
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.
    }
}