524 Stimmen

Wie überprüft man, ob eine Variable in JavaScript eine Ganzzahl ist?

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));

601voto

krisk Punkte 6937

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));
}

Mit Bitweisen Operationen

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/

Leistung

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.

391voto

pranag Punkte 5402

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")

168voto

Walter Roman Punkte 4441

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.

Link zur MDN-Seite

Number.isInteger = Number.isInteger || function(value) {
    return typeof value === "number" && 
           isFinite(value) && 
           Math.floor(value) === value;
};

130voto

Blake Regalia Punkte 2547

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
}

83voto

Nope Punkte 21879

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.com

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.

Powered by:

X