Wie überprüfe ich in JavaScript, ob eine Variable eine Ganzzahl ist, und gebe einen Alert aus, wenn nicht? Ich habe es versucht, aber es funktioniert nicht:
var data = 22;
alert(NaN(data));
Wie überprüfe ich in JavaScript, ob eine Variable eine Ganzzahl ist, und gebe einen Alert aus, wenn nicht? Ich habe es versucht, aber es funktioniert nicht:
var data = 22;
alert(NaN(data));
Das hängt davon ab, möchtest du auch Zeichenfolgen als potenzielle Ganzzahlen umwandeln?
Dies wird funktionieren:
function isInt(value) {
return !isNaN(value) &&
parseInt(Number(value)) == value &&
!isNaN(parseInt(value, 10));
}
Einfaches Parsen und Überprüfen
function isInt(value) {
var x = parseFloat(value);
return !isNaN(value) && (x | 0) === x;
}
Kurzschluss und Einsparung eines Parsvorgangs:
function isInt(value) {
if (isNaN(value)) {
return false;
}
var x = parseFloat(value);
return (x | 0) === x;
}
Oder vielleicht beides in einem Schritt:
function isInt(value) {
return !isNaN(value) && (function(x) { return (x | 0) === x; })(parseFloat(value))
}
Tests:
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
Hier ist der Fiddle: http://jsfiddle.net/opfyrqwp/28/
Tests zeigen, dass die Kurzschlusslösung die beste Leistung (ops/sec) hat.
// Kurzschluss und Einsparung eines Parsvorgangs
function isInt(value) {
var x;
if (isNaN(value)) {
return false;
}
x = parseFloat(value);
return (x | 0) === x;
}
Hier ist ein Benchmark: http://jsben.ch/#/htLVw
Wenn du eine kürzere, verschachtelte Form des Kurzschlusses bevorzugst:
function isInt(value) {
var x;
return isNaN(value) ? !1 : (x = parseFloat(value), (0 | x) === x);
}
Natürlich würde ich vorschlagen, dass der Minifier sich darum kümmert.
Verwenden Sie den === Operator ([strenges Gleichheitszeichen](https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Identity_strict_equality_())) wie folgt:
if (data === parseInt(data, 10))
alert("daten sind ganze zahl")
else
alert("daten sind keine ganze zahl")
Number.isInteger()
scheint der richtige Weg zu sein.
MDN hat auch das folgende Polyfill für Browser bereitgestellt, die Number.isInteger()
nicht unterstützen, hauptsächlich alle Versionen von IE.
Number.isInteger = Number.isInteger || function(value) {
return typeof value === "number" &&
isFinite(value) &&
Math.floor(value) === value;
};
Angenommen, Sie wissen nichts über die betreffende Variable, sollten Sie folgendes Vorgehen:
if(typeof data === 'number') {
var remainder = (data % 1);
if(remainder === 0) {
// ja, es ist eine ganze Zahl
}
else if(isNaN(remainder)) {
// nein, data ist entweder: NaN, Infinity oder -Infinity
}
else {
// nein, es ist eine Gleitkommazahl (aber immer noch eine Zahl)
}
}
else {
// auf keinen Fall, es ist nicht einmal eine Zahl
}
Um es einfach auszudrücken:
if(typeof data==='number' && (data%1)===0) {
// data ist eine ganze Zahl
}
Sie könnten überprüfen, ob die Zahl einen Rest hat:
var data = 22;
if(data % 1 === 0){
// ja, es ist eine ganze Zahl.
}
Beachten Sie, dass, wenn Ihre Eingabe auch Text sein könnte und Sie zuerst überprüfen möchten, ob es keiner ist, dann können Sie zuerst den Typ überprüfen:
var data = 22;
if(typeof data === 'number'){
// ja, es ist numerisch
if(data % 1 === 0){
// ja, es ist eine ganze Zahl.
}
}
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.