我如何检查如果一个变量是一个整数在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>
当前回答
首先,NaN是一个“数字”(是的,我知道这很奇怪,就这样吧),而不是一个“函数”。
你需要检查变量的类型是否为数字,如果是整数,我会使用模数。
alert(typeof data === 'number' && data%1 == 0);
其他回答
function isInteger(argument) { return argument == ~~argument; }
用法:
isInteger(1); // true<br>
isInteger(0.1); // false<br>
isInteger("1"); // true<br>
isInteger("0.1"); // false<br>
or:
function isInteger(argument) { return argument == argument + 0 && argument == ~~argument; }
用法:
isInteger(1); // true<br>
isInteger(0.1); // false<br>
isInteger("1"); // false<br>
isInteger("0.1"); // false<br>
此外,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;
};
对于没有分隔符的正整数值:
return ( data !== '' && data === data.replace(/\D/, '') );
测试 1. 如果不是空的, 2. 如果value等于在其值中替换非数字字符的结果。
在经历了几次成功和失败之后,我想出了这个解决方案:
const isInt = (value) => {
return String(parseInt(value, 10)) === String(value)
}
我喜欢上面的想法,检查不是NaN的值并使用parseFloat,但当我在React基础设施中尝试它时,由于某些原因它不起作用。
编辑: 我找到了一个不用字符串的更好的方法:
var isInt = function (str) {
return str === '0' || !!~~str;
}
我认为这是最简短的答案。也许是最有效的,但我可以更正一下。:)
好的,得到负号,因为没有描述我的例子,所以更多的例子:):
我使用正则表达式和测试方法:
var isInteger = /^[0-9]\d*$/;
isInteger.test(123); //true
isInteger.test('123'); // true
isInteger.test('sdf'); //false
isInteger.test('123sdf'); //false
// If u want to avoid string value:
typeof testVal !== 'string' && isInteger.test(testValue);