Gibt es eine Möglichkeit, NaN-Werte ohne eine if-Anweisung in 0 umzuwandeln:
if (isNaN(a)) a = 0;
Es ist sehr ärgerlich, meine Variablen jedes Mal zu überprüfen.
javascript
Tamás Pap
quelle
quelle
function noNaN( n ) { return isNaN( n ) ? 0 : n; }
und dann geradenoNaN( a )
Antworten:
Du kannst das:
... die einen von einem beliebigen "Falsey" -Wert in umwandeln
0
.Die "Falsey" -Werte sind:
false
null
undefined
0
""
( leerer String )NaN
(Keine Nummer)Oder wenn Sie es vorziehen:
... was den gleichen Effekt wie oben hat.
Wenn Sie mehr als nur testen möchten
NaN
, können Sie dasselbe tun, aber zuerst eine toNumber- Konvertierung durchführen.Dies verwendet den unären + Operator, um zu versuchen,
a
in eine Zahl zu konvertieren . Dies hat den zusätzlichen Vorteil, dass beispielsweise numerische Zeichenfolgen'123'
in eine Zahl konvertiert werden .Das einzig Unerwartete kann sein, wenn jemand ein Array übergibt, das erfolgreich in eine Zahl konvertiert werden kann:
Hier haben wir ein Array mit einem einzelnen Element, das eine numerische Zeichenfolge ist. Es wird erfolgreich in eine Zahl umgewandelt.
quelle
NaN
Wert. Dies funktioniert nicht als Test für alle Nicht-Zahlenwerte. Obwohl wir zuerst eine toNumber-Konvertierung versuchen könnten. Ich werde aktualisieren.Die Verwendung einer Doppel-Tilde (doppelt bitweise NICHT) -
~~
- führt einige interessante Dinge in JavaScript aus. Zum Beispiel können Sie es anstelle vonMath.floor
oder sogar als Alternative zu verwendenparseInt("123", 10)
! Es wurde viel über das Web diskutiert, daher werde ich nicht näher darauf eingehen, warum es hier funktioniert, aber wenn Sie interessiert sind: Was ist der Operator "double tilde" (~~) in JavaScript?Wir können diese Eigenschaft einer Doppel-Tilde ausnutzen, um sie
NaN
in eine Zahl umzuwandeln , und glücklicherweise ist diese Zahl Null!console.log(~~NaN); // 0
quelle
~~
, ich habe es nur zusammen mitparseFloat()
so benutzt :~~parseFloat($variable);
. Sehr ordentlich :) +1Schreiben Sie Ihre eigene Methode und verwenden Sie sie überall dort, wo Sie einen Zahlenwert wünschen:
quelle
null
, gibt es mir nicht das erwartete Ergebnis von0
. Mehr zu meinem Punkt hier: stackoverflow.com/questions/115548/why-is-isnannull-false-in-jsNumber(val)
stattdessen stattdessen verwendet, da es zurückkehrt,0
wenn es sowieso nicht herausgefunden werden kann.Etwas Einfacheres und Effektiveres für alles:
... die einen von einem beliebigen "Falsey" -Wert in umwandeln
0
.Die "Falsey" -Werte sind:
false
null
undefined
0
""
( leerer String )NaN
(Keine Nummer)quelle
Anstatt es zu kludgen, damit Sie fortfahren können, warum nicht sichern und sich fragen, warum Sie überhaupt auf ein NaN stoßen?
Wenn einer der numerischen Eingänge für eine Operation NaN ist, ist der Ausgang ebenfalls NaN. So funktioniert der aktuelle IEEE-Gleitkomma-Standard (nicht nur Javascript). Dieses Verhalten hat einen guten Grund : Die zugrunde liegende Absicht besteht darin, Sie davon abzuhalten, ein falsches Ergebnis zu verwenden, ohne zu bemerken, dass es falsch ist.
Die Art und Weise, wie NaN funktioniert, ist, wenn bei einer Sub-Sub-Sub-Operation (die ein NaN auf dieser niedrigeren Ebene erzeugt) etwas schief geht, das Endergebnis auch NaN ist, das Sie sofort als Fehler erkennen, selbst wenn Sie Die Fehlerbehandlungslogik (vielleicht werfen / fangen?) ist noch nicht vollständig.
NaN als Ergebnis einer arithmetischen Berechnung immer an, dass in den Details der Arithmetik etwas schief gelaufen ist. Auf diese Weise kann der Computer sagen, dass hier ein Debugging erforderlich ist. Anstatt einen Weg zu finden, mit einer Zahl fortzufahren, die kaum jemals richtig ist (ist 0 wirklich das, was Sie wollen?), Finden Sie das Problem und beheben Sie es.
Ein häufiges Problem in Javascript ist sowohl , dass
parseInt(...)
undparseFloat(...)
wird NaN zurück , wenn ein unsinniges Argument angegeben (null
,''
usw.). Beheben Sie das Problem auf der niedrigstmöglichen Ebene und nicht auf einer höheren Ebene. Dann hat das Ergebnis der Gesamtberechnung gute Chancen, einen Sinn zu ergeben, und Sie ersetzen das Ergebnis der gesamten Berechnung nicht durch eine magische Zahl (0 oder 1 oder was auch immer). (Der Trick von (parseInt (foo.value) || 0) funktioniert nur für Summen, nicht für Produkte. Für Produkte soll der Standardwert 1 statt 0 sein, aber nicht, wenn der angegebene Wert wirklich 0 ist.)Möglicherweise möchten Sie zur Vereinfachung der Codierung, dass eine Funktion einen Wert vom Benutzer abruft, bereinigt und bei Bedarf einen Standardwert bereitstellt, z. B.:
quelle
Wie wäre es mit einer Regex ?
Der folgende Code ignoriert NaN, um die Berechnung korrekt eingegebener Zahlen zu ermöglichen
Code-Snippet anzeigen
quelle
Methoden, die isNaN verwenden, funktionieren nicht, wenn Sie versuchen, parseInt zu verwenden, zum Beispiel:
Im zweiten Fall erzeugt isNaN jedoch false (dh die Nullzeichenfolge ist eine Zahl).
Zusammenfassend wird die Nullzeichenfolge von isNaN als gültige Zahl betrachtet, nicht jedoch von parseInt. Verifiziert mit Safari, Firefox und Chrome unter OSX Mojave.
quelle
quelle
Verwenden der Benutzerlösung 113716, die übrigens großartig ist, um all diese zu vermeiden, wenn ich sie auf diese Weise implementiert habe, um meine Zwischensummen-Textbox aus der Textbox-Einheit und der Textbox-Menge zu berechnen.
Beim Schreiben von Nicht-Zahlen in Textfelder für Einheiten und Mengen werden ihre Werte durch Null ersetzt, sodass die endgültige Buchung von Benutzerdaten keine Nicht-Zahlen enthält.
quelle
Bitte versuchen Sie diese einfache Funktion
quelle