我如何检查如果一个变量是一个整数在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>
当前回答
使用时要小心
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()对于空字符串和布尔值也会失败
其他回答
使用时要小心
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()对于空字符串和布尔值也会失败
在经历了几次成功和失败之后,我想出了这个解决方案:
const isInt = (value) => {
return String(parseInt(value, 10)) === String(value)
}
我喜欢上面的想法,检查不是NaN的值并使用parseFloat,但当我在React基础设施中尝试它时,由于某些原因它不起作用。
编辑: 我找到了一个不用字符串的更好的方法:
var isInt = function (str) {
return str === '0' || !!~~str;
}
我认为这是最简短的答案。也许是最有效的,但我可以更正一下。:)
ecmascript -6之前最简单、最清晰的解决方案(它也足够健壮,即使传递给函数的是一个非数字值,如字符串或null,也会返回false)如下:
function isInteger(x) { return (x^0) === x; }
下面的解决方案也可以工作,尽管没有上面的那样优雅:
function isInteger(x) { return Math.round(x) === x; }
注意,在上述实现中Math.ceil()或Math.floor()也可以同样好地使用(而不是Math.round())。
或者:
function isInteger(x) { return (typeof x === 'number') && (x % 1 === 0); }
一个相当常见的错误解决方案是:
function isInteger(x) { return parseInt(x, 10) === x; }
While this parseInt-based approach will work well for many values of x, once x becomes quite large, it will fail to work properly. The problem is that parseInt() coerces its first parameter to a string before parsing digits. Therefore, once the number becomes sufficiently large, its string representation will be presented in exponential form (e.g., 1e+21). Accordingly, parseInt() will then try to parse 1e+21, but will stop parsing when it reaches the e character and will therefore return a value of 1. Observe:
> String(1000000000000000000000)
'1e+21'
> parseInt(1000000000000000000000, 10)
1
> parseInt(1000000000000000000000, 10) === 1000000000000000000000
false
var x = 1.5;
if(!isNaN(x)){
console.log('Number');
if(x % 1 == 0){
console.log('Integer');
}
}else {
console.log('not a number');
}
此外,Number.isInteger()。也许Number.isSafeInteger()是这里使用es6指定的另一个选项。
在es6之前的浏览器中填充Number.isSafeInteger(..):
Number.isSafeInteger = Number.isSafeInteger || function(num) {
return typeof num === "number" &&
isFinite(num) &&
Math.floor(num) === num &&
Math.abs( num ) <= Number.MAX_SAFE_INTEGER;
};