Javascript 足够好了';是整数';支票?

Javascript 足够好了';是整数';支票?,javascript,function,integer,Javascript,Function,Integer,这是一个足够好的“是整数”检查: function isint( o ) { return Number( o ) === parseInt( o ); } 我想得到true,比如12,13,'-1',Number.MAX_值(不关心舍入问题)和false,以及其他任何值 这也可能非常接近: function isint( o ) { try { return eval( o ) === parseInt( Number( o ), 10 ); } ca

这是一个足够好的“是整数”检查:

function isint( o ) {
    return Number( o ) === parseInt( o );
}
我想得到
true
,比如12,13,'-1',Number.MAX_值(不关心舍入问题)和
false
,以及其他任何值

这也可能非常接近:

function isint( o ) {
    try {
        return eval( o ) === parseInt( Number( o ), 10 );
    } catch (e) {}
        return false
}

附加问题:Number.MAX\u值是否浮动?

一些与代码不符的示例:

'0x12' 这是因为和都尝试对数字进行JavaScript风格的解析——在本例中,将数字解析为十六进制。(但也许你对此没意见)。将10作为基数传递到parseInt的简单更改将修复代码的这一部分

'1.000000000000000 1'由于JavaScript数字无法存储足够的有效数字来表示该数字,因此出现故障

我建议做两次检查,一次检查数字,一次检查字符串。对于数字,您可以使用,以查看在向下舍入时数字是否发生变化。对于字符串,使用检查字符串是否只包含“-”和数字。比如:

function isint(o) {
  if (typeof o === 'number') {
    // o is an int if rounding down doesn't change it.
    return Math.floor(o) === o;
  }
  else if (typeof o === 'string' &&
           /^-?\d+$/.test(o)) { // match '-' (optional) followed by 1 or more digits
    // o is an int if parsing the string, and toString()ing it gets you the same value 
    var num = Number(o);
    return num.toString() === o;
  }
  return false;
}
试试看:

[12, 13, '14', '-1', '0x12', '1.0000000000000001'].forEach(function(x) {
  console.log(x + ' isInt = ' + isint(x));
});
印刷品:

12 isInt = true
13 isInt = true
14 isInt = true
-1 isInt = true
0x12 isInt = false
1.0000000000000001 isInt = false

您不能使用parseInt,因为
typeof parseInt(“A”,10)==“number”
返回true@user1671639你在说什么
isint(“A”)
似乎工作正常
NaN==NaN
将返回false。您认为“足够好”的标准是什么?对于给定的示例输入,它是否正常工作?是什么让你质疑它是否“足够好”?@meagar明白了。我错过了LHS,谢谢你纠正我。足够精确,可能有点过火,但工作做得很好。