Dipende, vuoi anche lanciare stringhe come numeri interi potenziali?
Questo farà:
function isInt(value) {
return !isNaN(value) &&
parseInt(Number(value)) == value &&
!isNaN(parseInt(value, 10));
}
Con operazioni Bitwise
Analisi e controllo semplici
function isInt(value) {
var x = parseFloat(value);
return !isNaN(value) && (x | 0) === x;
}
Cortocircuito e salvataggio di un'operazione di analisi:
function isInt(value) {
if (isNaN(value)) {
return false;
}
var x = parseFloat(value);
return (x | 0) === x;
}
O forse entrambi in un colpo solo:
function isInt(value) {
return !isNaN(value) && (function(x) { return (x | 0) === x; })(parseFloat(value))
}
test:
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
Ecco il violino: http://jsfiddle.net/opfyrqwp/28/
Prestazione
I test rivelano che la soluzione di corto circuito ha le migliori prestazioni (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;
}
Ecco un benchmark:
http://jsben.ch/#/htLVw
Se desideri una forma più corta e ottusa di corto circuito:
function isInt(value) {
var x;
return isNaN(value) ? !1 : (x = parseFloat(value), (0 | x) === x);
}
Ovviamente, suggerirei di occuparsene.
parseInt.