JBa*_*JBa 382 javascript
如何在JavaScript中检查变量是否为整数,如果不是则抛出警报?我试过这个,但它不起作用:
<html>
<head>
<script type="text/javascript">
var data = 22;
alert(NaN(data));
</script>
</head>
</html>
Run Code Online (Sandbox Code Playgroud)
kri*_*isk 477
这取决于,您是否也想将字符串转换为潜在的整数?
这样做:
function isInt(value) {
return !isNaN(value) &&
parseInt(Number(value)) == value &&
!isNaN(parseInt(value, 10));
}
Run Code Online (Sandbox Code Playgroud)
简单的解析和检查
function isInt(value) {
var x = parseFloat(value);
return !isNaN(value) && (x | 0) === x;
}
Run Code Online (Sandbox Code Playgroud)
短路并保存解析操作:
function isInt(value) {
if (isNaN(value)) {
return false;
}
var x = parseFloat(value);
return (x | 0) === x;
}
Run Code Online (Sandbox Code Playgroud)
或者两者兼而有之:
function isInt(value) {
return !isNaN(value) && (function(x) { return (x | 0) === x; })(parseFloat(value))
}
Run Code Online (Sandbox Code Playgroud)
测试:
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
Run Code Online (Sandbox Code Playgroud)
这是小提琴: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;
}
Run Code Online (Sandbox Code Playgroud)
这是一个基准:http: //jsben.ch/#/htLVw
如果你想要一种更短,更钝的短路形式:
function isInt(value) {
var x;
return isNaN(value) ? !1 : (x = parseFloat(value), (0 | x) === x);
}
Run Code Online (Sandbox Code Playgroud)
当然,我建议让迷你者来处理.
pra*_*nag 326
使用===运算符(严格相等),如下所示,
if (data === parseInt(data, 10))
alert("data is integer")
else
alert("data is not an integer")
Run Code Online (Sandbox Code Playgroud)
Bla*_*lia 118
假设您对相关变量一无所知,则应采用以下方法:
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
}
Run Code Online (Sandbox Code Playgroud)
简而言之:
if(typeof data==='number' && (data%1)===0) {
// data is an integer
}
Run Code Online (Sandbox Code Playgroud)
Wal*_*man 95
Number.isInteger()
似乎是要走的路.
MDN还为不支持的浏览器提供了以下polyfill Number.isInteger()
,主要是IE的所有版本.
Number.isInteger = Number.isInteger || function(value) {
return typeof value === "number" &&
isFinite(value) &&
Math.floor(value) === value;
};
Run Code Online (Sandbox Code Playgroud)
Nop*_*ope 64
您可以检查该号码是否有余数:
var data = 22;
if(data % 1 === 0){
// yes it's an integer.
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果您的输入也可能是文本而您想先检查它不是,那么您可以先检查类型:
var data = 22;
if(typeof data === 'number'){
// yes it is numeric
if(data % 1 === 0){
// yes it's an integer.
}
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ato 21
您可以使用简单的正则表达式:
function isInt(value) {
var er = /^-?[0-9]+$/;
return er.test(value);
}
Run Code Online (Sandbox Code Playgroud)
Phi*_*hil 15
首先,NaN是一个"数字"(是的,我知道这很奇怪,只是滚动它),而不是"功能".
您需要检查变量的类型是否为数字,并检查整数,我将使用模数.
alert(typeof data === 'number' && data%1 == 0);
Run Code Online (Sandbox Code Playgroud)
Jha*_*bub 13
使用时要小心
num%1
空字符串('')或布尔值(true或false)将作为整数返回.你可能不想那样做
false % 1 // true
'' % 1 //true
Run Code Online (Sandbox Code Playgroud)
Number.isInteger(22); //true
Number.isInteger(22.2); //false
Number.isInteger('22'); //false
Run Code Online (Sandbox Code Playgroud)
在浏览器中构建功能.Dosnt支持旧浏览器
备择方案:
Math.round(num)=== num
Run Code Online (Sandbox Code Playgroud)
但是,Math.round()也会因空字符串和布尔值而失败
检查变量是否等于舍入为整数的同一变量,如下所示:
if(Math.round(data) != data) {
alert("Variable is not an integer!");
}
Run Code Online (Sandbox Code Playgroud)
检查像海报这样的整数是否需要:
if (+data===parseInt(data)) {return true} else {return false}
Run Code Online (Sandbox Code Playgroud)
通知+在数据前面(将字符串转换为数字),===表示精确.
以下是示例:
data=10
+data===parseInt(data)
true
data="10"
+data===parseInt(data)
true
data="10.2"
+data===parseInt(data)
false
Run Code Online (Sandbox Code Playgroud)
为什么没有人提到Number.isInteger()
?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger
对我来说完美无缺,并以NaN
一个数字开头解决问题.
小智 5
最简单和最干净的ECMAScript-6前解决方案(即使将非数字值(如字符串或null)传递给函数,也足以返回false,如下所示:
function isInteger(x) { return (x^0) === x; }
Run Code Online (Sandbox Code Playgroud)
以下解决方案也可以使用,但不如上面那样优雅:
function isInteger(x) { return Math.round(x) === x; }
Run Code Online (Sandbox Code Playgroud)
请注意,在上面的实现中,Math.ceil()或Math.floor()可以同样使用(而不是Math.round()).
或者:
function isInteger(x) { return (typeof x === 'number') && (x % 1 === 0); }
Run Code Online (Sandbox Code Playgroud)
一个相当常见的错误解决方案如下:
function isInteger(x) { return parseInt(x, 10) === x; }
Run Code Online (Sandbox Code Playgroud)
虽然这种基于parseInt的方法适用于x的许多值,但是一旦x变得非常大,它将无法正常工作.问题是parseInt()在解析数字之前将其第一个参数强制转换为字符串.因此,一旦数字变得足够大,其字符串表示将以指数形式呈现(例如,1e + 21).因此,parseInt()将尝试解析1e + 21,但是当它到达e字符时将停止解析,因此将返回值1.观察:
> String(1000000000000000000000)
'1e+21'
> parseInt(1000000000000000000000, 10)
1
> parseInt(1000000000000000000000, 10) === 1000000000000000000000
false
Run Code Online (Sandbox Code Playgroud)
在ES6中,为Number Object添加了2种新方法。
如果参数为整数,则Number.isInteger()方法在其中返回true。
用法示例:
Number.isInteger(10); // returns true
Number.isInteger(10.5); // returns false
Run Code Online (Sandbox Code Playgroud)