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;
javascript
nan
Paul D. Waite
quelle
quelle
Antworten:
Versuchen Sie diesen Code:
Hier erfahren Sie, ob ein Wert NaN ist und nicht nur Zahlen: Wie testen Sie NaN in Javascript?
quelle
NaN
, dann ja. (Ich sage nicht, dass Sie immer würden.)isNaN(parseFloat("geoff")) // true
isNaN(parseFloat("10geo")) // false
Wie ist das nützlich?Ich bin gerade auf diese Technik in dem Buch Effective JavaScript gestoßen , das ziemlich einfach ist:
Da NaN der einzige JavaScript-Wert ist, der als ungleich zu sich selbst behandelt wird, können Sie jederzeit testen, ob ein Wert NaN ist, indem Sie ihn auf Gleichheit mit sich selbst überprüfen:
Ich habe dies erst erkannt, als @allsyed einen Kommentar abgegeben hat, aber dies steht in der ECMA-Spezifikation: https://tc39.github.io/ecma262/#sec-isnan-number
quelle
Verwenden Sie diesen Code:
Siehe
isNaN()
Dokumente zu MDN .quelle
var value = 0/0;
undvar value2= String("123 131");
NaN - Werte und so etwas wie dies zu schaffenvar value3 = "abcd";
ist auch ein NaN Wert.Soweit ein Wert vom Typ Number geprüft werden soll, ob es sich um einen Wert handelt
NaN
oder nicht, erledigt die globale FunktionisNaN
die ArbeitFür einen generischen Ansatz, der für alle Typen in JS funktioniert, können wir eine der folgenden Methoden verwenden:
Für ECMAScript-5-Benutzer:
Für Benutzer von ECMAScript-6:
Aus Konsistenzgründen in ECMAScript 5 und 6 können wir diese Polyfüllung auch für Number.isNan verwenden
Bitte überprüfen Sie diese Antwort für weitere Details.
quelle
isNaN
das Argument zuerst in einen Zahlenwert konvertiert.NaN ist ein spezieller Wert, der so nicht getestet werden kann. Eine interessante Sache, die ich nur teilen wollte, ist diese
Dies gibt nur für NaN-Werte true zurück und ist eine sichere Methode zum Testen. Sollte definitiv in eine Funktion eingeschlossen oder zumindest kommentiert werden, da es offensichtlich nicht viel Sinn macht zu testen, ob dieselbe Variable nicht gleich ist, hehe.
quelle
Sie sollten den globalen
isNaN(value)
Funktionsaufruf verwenden, weil:Beispiele:
Ich hoffe, dies wird dir helfen.
quelle
isNaN('') //false
aberparseInt('') //NaN
. Gleiches gilt fürnull
.Ab ES6 ,
Object.is(..)
ist ein neues Dienstprogramm , das verwendet werden kann , zwei Werte für absolute Gleichheit zu testen:quelle
'1.2geoff'
Verwenden SieNumber()
stattdessen einfach den Parser, um das Problem zu beheben, bei dem eine Analyse durchgeführt wird .Also eher als das:
Mach das:
EDIT: Ich habe gerade ein anderes Problem bemerkt ... falsche Werte (und wahr als echter Boolescher Wert) wurden
Number()
als zurückgegeben zurückgegeben0
! In diesem Fall ... funktioniert parseFloat stattdessen jedes Mal. Also greifen Sie darauf zurück:Und das deckt scheinbar alles ab. Ich habe es mit 90% langsamer als das von lodash bewertet,
_.isNaN
aber dann deckt man nicht alle NaNs ab:http://jsperf.com/own-isnan-vs-underscore-lodash-isnan
Um ganz klar zu sein, meine kümmert sich um die menschliche wörtliche Interpretation von etwas, das "keine Zahl" ist, und lodashs kümmert sich um die Computer-wörtliche Interpretation der Überprüfung, ob etwas "NaN" ist.
quelle
Während @chiborgs Antwort korrekt ist, sollte noch mehr beachtet werden:
Wenn Sie diese Methode zur Validierung der Eingabe verwenden, ist das Ergebnis eher liberal.
Also, ja, Sie können verwenden
parseFloat(string)
(oder im Fall von vollständigen ZahlenparseInt(string, radix)
) und diese anschließend mit umschließenisNaN()
, aber beachten Sie die Gotcha mit Zahlen, die mit zusätzlichen nicht numerischen Zeichen verflochten sind.quelle
parseFloat('test1.2')
wird zurückkehrenNaN
.Einfache Lösung!
Wirklich super einfach! Hier! Haben Sie diese Methode!
Verwenden Sie so einfach wie:
Beispiel:
Es gibt einige alternative Pfade, die Sie für die Implementierung verwenden, wenn Sie keine Methode mit alternativem Namen verwenden möchten und sicherstellen möchten, dass sie globaler verfügbar ist. Warnung Diese Lösungen umfassen das Ändern nativer Objekte und sind möglicherweise nicht die beste Lösung. Seien Sie immer vorsichtig und beachten Sie, dass andere Bibliotheken, die Sie möglicherweise verwenden, von nativem Code oder ähnlichen Änderungen abhängen können.
Alternative Implementierung 1: Native ersetzen
isNaN
Methode.Alternative Implementierung 2: An Zahlenobjekt anhängen
* Vorgeschlagen, da es sich auch um eine Polyfüllung für ECMA 5 bis 6 handelt
Alternative Lösung , wenn leer
Eine einfache Fenstermethode Ich habe diesen Test geschrieben, wenn das Objekt leer ist . Es ist insofern etwas anders, als es nicht gibt, ob der Gegenstand "genau" NaN ist , aber ich dachte, ich würde ihn hochwerfen, da er auch nützlich sein kann, wenn nach leeren Gegenständen gesucht wird.
Beispiel:
Code-Snippet anzeigen
Extrem tief prüfen, ob es leer ist
Letzteres geht ein bisschen tief und prüft sogar, ob ein Objekt voller leerer Objekte ist. Ich bin sicher, es gibt Raum für Verbesserungen und mögliche Gruben, aber bisher scheint es fast alles zu fangen.
Code-Snippet anzeigen
quelle
isNaN
NICHT zuverlässig ist. Ich wurde dort kommentiert und sagte, diese Frage würde besser zu meiner Antwort passen, also verschob ich sie hierher. Stellen Sie einfach etwas Hilfreiches / Nützliches in Bezug auf dieses Problem bereit, das bei einer Google-Suche nach dem vorliegenden Problem angezeigt wirdis it NaN?
. Nebenbei bemerkt, meine Antwort wäre öfter genauer als die ausgewählte Antwort.Ich möchte nur eine andere Alternative teilen, sie ist nicht unbedingt besser als andere hier, aber ich denke, es lohnt sich, sie sich anzusehen:
Die Logik dahinter ist, dass jede Zahl außer
0
undNaN
gegossen wirdtrue
.Ich habe einen Schnelltest durchgeführt, und er funktioniert so gut wie
Number.isNaN
und prüft sich selbst auf falsch. Alle drei schneiden besser ab alsisNan
Die Ergebnisse
Kann nützlich sein, wenn Sie die
isNaN
Funktionsstörung vermeiden möchten .quelle
Wenn Ihre Umgebung ECMAScript 2015 unterstützt , möchten Sie möglicherweise verwenden
Number.isNaN
, um sicherzustellen, dass der Wert wirklich istNaN
.Das Problem mit
isNaN
ist, wenn Sie das mit nicht numerischen Daten verwenden, werden nur wenige verwirrende Regeln (gemäß MDN) angewendet. Zum Beispiel,In von ECMA Script 2015 unterstützten Umgebungen möchten Sie möglicherweise verwenden
quelle
isNaN
könnte Sie in Schwierigkeiten bringen und denken Sie daran,Number.isNaN
in ECMAScript 2015-Umgebungen zu verwenden :-)NaN in JavaScript steht für "Not A Number", obwohl der Typ tatsächlich "number" ist.
Um zu überprüfen, ob eine Variable den Wert NaN hat, können wir die Funktion isNaN () nicht einfach verwenden, da isNaN () das folgende Problem aufweist (siehe unten):
Was hier wirklich passiert, ist, dass myVar implizit zu einer Zahl gezwungen wird:
Es macht tatsächlich Sinn, weil "A" eigentlich keine Zahl ist. Was wir aber wirklich überprüfen möchten, ist, ob myVar genau den Wert NaN hat.
IsNaN () kann also nicht helfen. Was sollen wir dann stattdessen tun?
In Anbetracht dessen, dass NaN der einzige JavaScript-Wert ist, der ungleich sich selbst behandelt wird, können wir mit! == überprüfen, ob er sich selbst gleich ist
So zu schließen , wenn es wahr ist , dass eine Variable == selbst, dann ist diese Variable genau der Wert NaN:
quelle
Ich benutze die
isNaN
Funktion des Unterstrichs, weil in JavaScript:Sei dir zumindest dieser Gotcha bewusst.
quelle
undefined
? Es ist wahr, dassundefined
es keine Zahl ist, nicht wahr ?undefined
kann etwas anderes sein alsNaN
, aber es ist immer noch keine Zahl, alsoisNaN(undefined)
sollte (und ist)true
Vielleicht auch das:
quelle
Es scheint, dass isNaN () in Node.js nicht sofort unterstützt wird.
Ich habe mit gearbeitet
quelle
quelle
Siehe Mozilla-Dokumentation Die globale NaN-Eigenschaft ist ein Wert, der Not-A-Numbe darstellt
Der beste Weg ist die Verwendung von 'isNaN ()', einer eingebauten Funktion zur Überprüfung von NaN. Alle Browser unterstützen den Weg ..
quelle
Die Regel lautet:
Das Problem der Funktion isNaN () besteht darin, dass in einigen Fällen ein unerwartetes Ergebnis zurückgegeben werden kann:
Ein besserer Weg, um zu überprüfen, ob der Wert wirklich NaN ist, ist:
quelle
Gemäß IEEE 754 werden alle Beziehungen, an denen NaN beteiligt ist, mit Ausnahme von! = Als falsch bewertet. So ist beispielsweise (A> = B) = falsch und (A <= B) = falsch, wenn A oder B oder beide NaN sind / sind.
quelle
Ich habe diese Antwort auf eine andere Frage in StackOverflow geschrieben, bei der eine andere prüft, wann,
NaN == null
aber dann wurde sie als doppelt markiert, damit ich meinen Job nicht verschwenden möchte.Schauen Sie sich Mozilla Developer Network an
NaN
.Kurze Antwort
Verwenden
distance || 0
Sie diese Option nur, wenn Sie sicherstellen möchten, dass Ihr Wert eine richtige Zahl ist, oderisNaN()
überprüfen Sie sie.Lange Antwort
Das NaN (Not-a-Number) ist ein seltsames globales Objekt in Javascript, das häufig zurückgegeben wird, wenn eine mathematische Operation fehlschlägt.
Sie wollten überprüfen, ob
NaN == null
welche Ergebnisse vorliegenfalse
. HovewerNaN == NaN
ergibt sogar mitfalse
.Ein einfacher Weg, um herauszufinden, ob eine Variable
NaN
eine globale Funktion istisNaN()
.Ein anderer ist
x !== x
die nur wahr ist, wenn x NaN ist. (danke für die Erinnerung an @ raphael-schweikert)Aber warum hat die kurze Antwort funktioniert?
Lass es uns herausfinden.
Wenn Sie
NaN == false
das Ergebnis aufrufen, ist dasfalse
gleiche mitNaN == true
.Irgendwo in den Spezifikationen hat JavaScript einen Datensatz mit immer falschen Werten, der Folgendes umfasst:
NaN
- Keine Nummer""
- leerer Stringfalse
- ein boolescher Fehlernull
- Nullobjektundefined
- undefinierte Variablen0
- numerische 0, einschließlich +0 und -0quelle
var xIsNaN = x !== x;
Dies ergibt nur dann true, wenn x istNaN
.Eine andere Lösung wird auf der parseFloat-Seite von MDN erwähnt
Es bietet eine Filterfunktion für striktes Parsen
Und dann können Sie
isNaN
überprüfen, ob dies der Fall istNaN
quelle
Der genaue Weg zu überprüfen ist:
quelle
Ich habe diese kleine Funktion erstellt, die wie ein Zauber wirkt. Anstatt nach NaN zu suchen, was nicht intuitiv zu sein scheint, suchen Sie nach einer Nummer. Ich bin mir ziemlich sicher, dass ich nicht der erste bin, der das so macht, aber ich dachte, ich würde es teilen.
quelle
Einen anderen Weg gefunden, nur zum Spaß.
quelle
Die Antwort von marksyzm funktioniert gut, gibt aber nicht false zurück,
Infinity
da Infinity technisch gesehen keine Zahl ist.Ich
isNumber
habe mir eine Funktion ausgedacht, die prüft, ob es sich um eine Zahl handelt.UPDATE: Ich habe festgestellt, dass dieser Code für einige Parameter fehlschlägt, also habe ich ihn verbessert.
quelle
Das ist nicht elegant. aber nachdem ich isNAN () ausprobiert hatte, kam ich zu dieser Lösung, die eine andere Alternative darstellt. In diesem Beispiel habe ich auch '.' weil ich für float maskiere. Sie können dies auch umkehren, um sicherzustellen, dass keine Zahlen verwendet werden.
Dies ist eine Einzelzeichenauswertung, aber Sie können auch eine Zeichenfolge durchlaufen, um nach Zahlen zu suchen.
quelle
Sie können NaN mit der Javascript-Funktion isNaN überprüfen. Übergeben Sie einfach die Zahl oder den Wert an die Funktion isNaN
quelle
Konvertieren Sie einfach das Ergebnis in String und vergleichen Sie es mit 'NaN'.
quelle
Ist (NaN> = 0) ? ...... " Ich weiß nicht ".
Bedingungen werden nur ausgeführt, wenn TRUE .
Nicht auf FALSE .
Nicht auf " Ich weiß nicht ".
quelle