首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在JavaScript中检查变量是否为整数?

如何在JavaScript中检查变量是否为整数?
EN

Stack Overflow用户
提问于 2013-02-01 06:44:45
回答 31查看 661K关注 0票数 459

如何在JavaScript中检查变量是否为整数,如果不是则抛出警报?我试过了,但不起作用:

代码语言:javascript
复制
<html>
    <head>
        <script type="text/javascript">
            var data = 22;
            alert(NaN(data));
        </script>
    </head>
</html>
EN

回答 31

Stack Overflow用户

回答已采纳

发布于 2013-02-01 06:54:23

使用===运算符(strict equality如下所示,

代码语言:javascript
复制
if (data === parseInt(data, 10))
    alert("data is integer")
else
    alert("data is not an integer")
票数 373
EN

Stack Overflow用户

发布于 2013-02-10 10:28:16

这取决于,你是否也想将字符串转换为潜在的整数?

这样就可以了:

代码语言:javascript
复制
function isInt(value) {
  return !isNaN(value) && 
         parseInt(Number(value)) == value && 
         !isNaN(parseInt(value, 10));
}

使用逐位操作

简单的解析和检查

代码语言:javascript
复制
function isInt(value) {
  var x = parseFloat(value);
  return !isNaN(value) && (x | 0) === x;
}

短路和保存解析操作:

代码语言:javascript
复制
function isInt(value) {
  if (isNaN(value)) {
    return false;
  }
  var x = parseFloat(value);
  return (x | 0) === x;
}

或者可能两者都在一次拍摄中:

代码语言:javascript
复制
function isInt(value) {
  return !isNaN(value) && (function(x) { return (x | 0) === x; })(parseFloat(value))
}

测试:

代码语言:javascript
复制
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/

性能

测试表明,短路解决方案具有最佳性能(ops/sec)。

代码语言:javascript
复制
// 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

如果你喜欢一种更短、更钝的短路形式:

代码语言:javascript
复制
function isInt(value) {
  var x;
  return isNaN(value) ? !1 : (x = parseFloat(value), (0 | x) === x);
}

当然,我建议让minifier来处理这件事。

票数 554
EN

Stack Overflow用户

发布于 2013-02-01 07:00:43

假设您对有问题的变量一无所知,那么您应该采用这种方法:

代码语言:javascript
复制
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
}

简单地说:

代码语言:javascript
复制
if(typeof data==='number' && (data%1)===0) {
    // data is an integer
}
票数 127
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14636536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档