这是否足够'是整数'检查:
function isint( o ) {
return Number( o ) === parseInt( o );
}
我想得到true
,例如12,13,'14',' - 1,Number.MAX_VALUE,(不关心舍入问题)和false
for floats,等等。
这也可能非常接近:
function isint( o ) {
try {
return eval( o ) === parseInt( Number( o ), 10 );
} catch (e) {}
return false
}
另外一个问题:Number.MAX_VALUE浮动?
答案 0 :(得分:1)
一些打破代码的例子:
<强> '×12'强> 这会分解,因为Number()和parseInt()都试图对数字进行JavaScript样式解析 - 在这种情况下将数字解析为十六进制。 (但也许你对此感到满意)。将10作为基数传递给parseInt的简单更改将修复代码的这一部分。
'1.0000000000000001'这会因为JavaScript编号无法存储足够的有效数字来表示此数字而中断。
我建议做两个检查,一个用于Numbers,一个用于Strings。对于Numbers,您可以使用floor()查看舍入时数字是否发生变化。对于字符串,使用RegExp检查字符串是否只包含“ - ”和数字。类似的东西:
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