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,谢谢你纠正我。足够精确,可能有点过火,但工作做得很好。