Itu tergantung, apakah Anda juga ingin menggunakan string sebagai bilangan bulat potensial juga?
Ini akan melakukan:
function isInt(value) {
return !isNaN(value) &&
parseInt(Number(value)) == value &&
!isNaN(parseInt(value, 10));
}
Dengan operasi Bitwise
Penguraian sederhana dan periksa
function isInt(value) {
var x = parseFloat(value);
return !isNaN(value) && (x | 0) === x;
}
Hubungan arus pendek, dan menyimpan operasi parse:
function isInt(value) {
if (isNaN(value)) {
return false;
}
var x = parseFloat(value);
return (x | 0) === x;
}
Atau mungkin keduanya dalam satu kesempatan:
function isInt(value) {
return !isNaN(value) && (function(x) { return (x | 0) === x; })(parseFloat(value))
}
Tes:
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
Ini biola: http://jsfiddle.net/opfyrqwp/28/
Performa
Pengujian menunjukkan bahwa solusi hubungan arus pendek memiliki kinerja terbaik (ops / dtk).
// Short-circuiting, and saving a parse operation
function isInt(value) {
var x;
if (isNaN(value)) {
return false;
}
x = parseFloat(value);
return (x | 0) === x;
}
Berikut ini adalah patokan:
http://jsben.ch/#/htLVw
Jika Anda menginginkan hubungan arus pendek yang tumpul, tumpul:
function isInt(value) {
var x;
return isNaN(value) ? !1 : (x = parseFloat(value), (0 | x) === x);
}
Tentu saja, saya sarankan membiarkan minifier merawatnya.
parseInt
.