549 Stimmen

Wie überprüft man in JavaScript, ob eine Zahl NaN ist?

Ich habe es nur in der JavaScript-Konsole von Firefox versucht, aber keine der folgenden Anweisungen gibt true zurück:

parseFloat('geoff') == NaN;

parseFloat('geoff') == Number.NaN;

2voto

Ich habe einen anderen Weg gefunden, nur so zum Spaß.

function IsActuallyNaN(obj) {
  return [obj].includes(NaN);  
}

2voto

Zzy Punkte 35

Eine andere Lösung wird in MDN's parseFloat Seite

Es bietet eine Filterfunktion für das strenge Parsing

var filterFloat = function (value) {
    if(/^(\-|\+)?([0-9]+(\.[0-9]+)?|Infinity)$/
      .test(value))
      return Number(value);
  return NaN;
}

console.log(filterFloat('421'));               // 421
console.log(filterFloat('-421'));              // -421
console.log(filterFloat('+421'));              // 421
console.log(filterFloat('Infinity'));          // Infinity
console.log(filterFloat('1.61803398875'));     // 1.61803398875
console.log(filterFloat('421e+0'));            // NaN
console.log(filterFloat('421hop'));            // NaN
console.log(filterFloat('hop1.61803398875'));  // NaN

Und dann können Sie isNaN um zu prüfen, ob es sich um NaN

2voto

Roomy Punkte 1960

Ich habe diese Antwort auf eine andere Frage zu StackOverflow wo ein anderer prüft, wann NaN == null aber dann wurde es als Duplikat markiert, so dass ich meine Arbeit nicht verschwenden möchte.

Blick auf Mozilla-Entwickler-Netzwerk über NaN .


Kurze Antwort

Verwenden Sie einfach distance || 0 wenn Sie sicher sein wollen, dass Ihr Wert eine richtige Zahl ist oder isNaN() um es zu überprüfen.

Lange Antwort

Die NaN (Not-a-Number) ist eine seltsame Global Object in Javascript häufig zurückgegeben, wenn einige mathematische Operation fehlgeschlagen.

Sie wollten prüfen, ob NaN == null welche Ergebnisse false . Hovewer selbst NaN == NaN Ergebnisse mit false .

Ein einfacher Weg, um herauszufinden, ob die Variable NaN ist eine globale Funktion isNaN() .

Eine andere ist x !== x was nur wahr ist, wenn x NaN ist. (Dank für den Hinweis an @raphael-schweikert)

Aber warum hat die kurze Antwort funktioniert?

Finden wir es heraus.

Wenn Sie anrufen NaN == false das Ergebnis ist false , ebenso bei NaN == true .

Irgendwo in den Spezifikationen JavaScript hat einen Datensatz mit immer falsche Werte, die umfasst:

  • NaN - Nicht-eine-Nummer
  • "" - leere Zeichenkette
  • false - ein boolescher Wert false
  • null - Null-Objekt
  • undefined - undefinierte Variablen
  • 0 - numerisch 0, einschließlich +0 und -0

2voto

Ronald Davis Punkte 21

Nach IEEE 754 werden alle Beziehungen, die NaN beinhalten, als falsch ausgewertet, außer !=. So ist zum Beispiel (A >= B) = falsch und (A <= B) = falsch, wenn A oder B oder beide NaN sind.

0voto

Nishanth Matha Punkte 5895

Die genaue Art und Weise der Überprüfung ist:

//takes care of boolen, undefined and empty

isNaN(x) || typeof(x) ==='boolean' || typeof(x) !=='undefined' || x!=='' ? 'is really a nan' : 'is a number'

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