我如何检查如果一个变量是一个整数在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>
当前回答
为什么没有人提到Number.isInteger() ?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger
为我完美地工作,并解决了NaN开始一个数字的问题。
其他回答
检查变量是否等于相同的变量四舍五入为整数,就像这样:
if(Math.round(data) != data) {
alert("Variable is not an integer!");
}
你可以tryNumber.isInteger(Number(value))如果value可能是一个字符串形式的整数,例如var value = "23",你想要这个值为true。避免尝试Number.isInteger(parseInt(value)),因为这并不总是返回正确的值。例如,如果var value = "23abc",并且你使用parseInt实现,它仍然会返回true。
但是如果你想要严格的整数值,那么可能Number.isInteger(value)就可以了。
你可以使用regexp:
function isInteger(n) {
return (typeof n == 'number' && /^-?\d+$/.test(n+''));
}
如果你的浏览器支持,Number.isInteger()是最好的方法,如果不支持,我认为有很多方法:
function isInt1(value){
return (value^0) === value
}
or:
function isInt2(value){
return (typeof value === 'number') && (value % 1 === 0);
}
or:
function isInt3(value){
return parseInt(value, 10) === value;
}
or:
function isInt4(value){
return Math.round(value) === value;
}
现在我们可以测试结果:
var value = 1
isInt1(value) // return true
isInt2(value) // return true
isInt3(value) // return true
isInt4(value) // return true
var value = 1.1
isInt1(value) // return false
isInt2(value) // return false
isInt3(value) // return false
isInt4(value) // return false
var value = 1000000000000000000
isInt1(value) // return false
isInt2(value) // return true
isInt3(value) // return false
isInt4(value) // return true
var value = undefined
isInt1(value) // return false
isInt2(value) // return false
isInt3(value) // return false
isInt4(value) // return false
var value = '1' //number as string
isInt1(value) // return false
isInt2(value) // return false
isInt3(value) // return false
isInt4(value) // return false
所有这些方法都可以,但当数字很大时,parseInt和^ operator就不能很好地工作了。
使用时要小心
num % 1
空字符串(")或布尔值(真或假)将返回为整数。你可能不想这么做
false % 1 // true
'' % 1 //true
Number.isInteger(数据)
Number.isInteger(22); //true
Number.isInteger(22.2); //false
Number.isInteger('22'); //false
内置功能在浏览器中。不支持旧浏览器
选择:
Math.round(num)=== num
然而,Math.round()对于空字符串和布尔值也会失败