如何在JavaScript中检查变量是否为整数,如果不是则抛出警报?我试过了,但不起作用:
<html>
<head>
<script type="text/javascript">
var data = 22;
alert(NaN(data));
</script>
</head>
</html>
发布于 2013-02-01 06:54:23
使用===运算符(strict equality如下所示,
if (data === parseInt(data, 10))
alert("data is integer")
else
alert("data is not an integer")
发布于 2013-02-10 10:28:16
这取决于,你是否也想将字符串转换为潜在的整数?
这样就可以了:
function isInt(value) {
return !isNaN(value) &&
parseInt(Number(value)) == value &&
!isNaN(parseInt(value, 10));
}
使用逐位操作
简单的解析和检查
function isInt(value) {
var x = parseFloat(value);
return !isNaN(value) && (x | 0) === x;
}
短路和保存解析操作:
function isInt(value) {
if (isNaN(value)) {
return false;
}
var x = parseFloat(value);
return (x | 0) === x;
}
或者可能两者都在一次拍摄中:
function isInt(value) {
return !isNaN(value) && (function(x) { return (x | 0) === x; })(parseFloat(value))
}
测试:
isInt(42) // true
isInt("42") // true
isInt(4e2) // true
isInt("4e2") // true
isInt(" 1 ") // true
isInt("") // false
isInt(" ") // false
isInt(42.1) // false
isInt("1a") // false
isInt("4e2a") // false
isInt(null) // false
isInt(undefined) // false
isInt(NaN) // false
这就是问题所在:http://jsfiddle.net/opfyrqwp/28/
性能
测试表明,短路解决方案具有最佳性能(ops/sec)。
// Short-circuiting, and saving a parse operation
function isInt(value) {
var x;
if (isNaN(value)) {
return false;
}
x = parseFloat(value);
return (x | 0) === x;
}
这是一个基准测试:http://jsben.ch/#/htLVw
如果你喜欢一种更短、更钝的短路形式:
function isInt(value) {
var x;
return isNaN(value) ? !1 : (x = parseFloat(value), (0 | x) === x);
}
当然,我建议让minifier来处理这件事。
发布于 2013-02-01 07:00:43
假设您对有问题的变量一无所知,那么您应该采用这种方法:
if(typeof data === 'number') {
var remainder = (data % 1);
if(remainder === 0) {
// yes, it is an integer
}
else if(isNaN(remainder)) {
// no, data is either: NaN, Infinity, or -Infinity
}
else {
// no, it is a float (still a number though)
}
}
else {
// no way, it is not even a number
}
简单地说:
if(typeof data==='number' && (data%1)===0) {
// data is an integer
}
https://stackoverflow.com/questions/14636536
复制相似问题