Wie überprüfe ich, ob eine Variable nicht null ist?


Antworten:


399

Sie sind nicht gleichwertig. Die erste wird der Block nach dem Ausführen ifAnweisung , wenn myVarist truthy (dh ausgewertet truein einem bedingten), während der zweite den Block ausgeführt wird , wenn myVarirgendein anderer Wert als null.

Die einzigen Werte, die in JavaScript nicht wahr sind, sind die folgenden (auch als falsche Werte bezeichnet):

  • null
  • undefined
  • 0
  • "" (die leere Zeichenfolge)
  • false
  • NaN

69

So können Sie testen, ob eine Variable nicht NULL ist:

if (myVar !== null) {...}

Der Block wird ausgeführt, wenn myVar nicht null ist. Er wird ausgeführt, wenn myVar undefiniert oder falsch oder 0oder NaNoder irgendetwas anderes ist.


1
Für diejenigen, die sich fragen ... Dies prüft nicht auf eine leere ("")und undefinierte Zeichenfolge . Siehe meine Geige als Referenz: jsfiddle.net/b0tm7yaf
Barrosy

47

Lesen Sie diesen Beitrag: http://enterprisejquery.com/2010/10/how-good-c-habits-can-encourage-bad-javascript-habits-part-2/

Es hat einige nette Tipps für JavaScript im Allgemeinen, aber eine Sache, die es erwähnt, ist, dass Sie nach Null suchen sollten, wie:

if(myvar) { }

Es wird auch erwähnt, was als "Falsey" angesehen wird, was Sie möglicherweise nicht realisieren.


33
Diese Prüfung ist eigentlich nicht sicher. Wenn myvar 0, false oder ein anderer falscher Wert ist, schlägt der Test fehl (wenn Sie nur beabsichtigen, nicht auf null zu prüfen). Verwenden Sie dies also nur, um zu prüfen, ob nicht null ist, wenn die Variable niemals einen anderen falschen Wert haben kann.
Werzi2001

2
Der Link funktioniert nicht mehr. Ich habe hier eine Kopie des Beitrags gefunden: appendto.com/2010/10/… Es ist allerdings seltsam, weil Elijahs Beitrag (und der Beispielcode) darauf hindeuten würden, dass er der Autor ist, aber dort nicht als Autor aufgeführt ist ...
thepaulpage

2
Sieht so aus, als ob diese Seite nicht mehr existiert. Es wäre hilfreich, wenn Sie die Informationen in den Beitrag selbst aufnehmen könnten und nicht nur einen externen Link.
Apraetor

Dies funktioniert nicht, wenn der Wert vorhanden ist, aber 0 (Null) ist
zmechanic

15
  • Code in Ihrem if(myVar) { code }wird NICHT nur ausgeführt, wenn er myVargleich ist: false, 0, "", null, undefined, NaNoder Sie nie eine Variable definiert habenmyVar (dann stoppt der Code zusätzlich die Ausführung und löst eine Ausnahme aus).
  • Code in Ihrem if(myVar !== null) {code}Testament wird NICHT nur ausgeführt, wenn er myVargleich ist nulloder Sie ihn nie definiert haben (löst eine Ausnahme aus).

Hier haben Sie alle ( src )

wenn

Geben Sie hier die Bildbeschreibung ein

== (seine Negation ! = )

Geben Sie hier die Bildbeschreibung ein

=== (seine Verneinung ! == )

Geben Sie hier die Bildbeschreibung ein


9

Es gibt noch ein anderes mögliches Szenario, auf das ich gerade gestoßen bin.

Ich habe einen Ajax-Aufruf durchgeführt und Daten als Null in einem Zeichenfolgenformat zurückerhalten. Ich musste es so überprüfen:

if(value != 'null'){}

Null war also eine Zeichenfolge, die "null" lautete, anstatt wirklich null zu sein.

EDIT: Es sollte verstanden werden, dass ich dies nicht so verkaufe, wie es gemacht werden sollte. Ich hatte ein Szenario, in dem dies der einzige Weg war, dies zu tun. Ich bin mir nicht sicher warum ... Vielleicht hat der Typ, der das Backend geschrieben hat, die Daten falsch dargestellt, aber unabhängig davon ist dies das wirkliche Leben. Es ist frustrierend zu sehen, dass dies von jemandem herabgestimmt wird, der versteht, dass es nicht ganz richtig ist, und dann von jemandem hochgestimmt wird, dem es tatsächlich hilft.


Analysieren Sie lieber Ihren Wert als den Vergleich mit nullZeichenfolgen.
Bergi

1
Diese Antwort ist legitim, unabhängig davon, ob Sie die Anwendung verstehen oder nicht. Ich schätze es nicht, für das Posten von Dingen, die tatsächlich funktionierten, herabgestimmt zu werden. Haben Sie bemerkt, dass es eine positive Bewertung hatte, bevor Sie es berührten? Das liegt daran, dass es ein echtes Szenario ist.
Flat Cat

3
Ja, und ich habe abgelehnt, weil ich denke, dass es die falsche Lösung ist. Im Falle eines Ajax-Anrufs sollten Sie value = JSON.parse(value)den einfachen und richtigen value != nullTest besser durchführen und dann verwenden
Bergi

2
Anscheinend verstehst du nicht. Mir ist klar, dass du denkst, dass du es tust, aber du tust es nicht.
Flat Cat

4
Ich verstehe, dass es eine funktionierende Lösung war. Aber ich denke nicht, dass es ein guter Rat ist, also respektiere bitte meine Ablehnung.
Bergi

1

Wenn myVarnull ist, wird der Block ausgeführt, wenn er nicht anderweitig ausgeführt wird.

if (myVar != null) {...}


Nicht die Zeichenfolge 'null', sondern der spezielle Wert null.
Micah Walter

1

Manchmal ist es besser, vorbereitet zu sein, wenn es nicht einmal definiert wurde. Dafür habe ich typeof verwendet

if(typeof(variable) !== "undefined") {
    //it exist
    if(variable !== null) {
        //and is not null
    }
    else {
        //but is null
    }
}
else {
    //it doesn't
}

-4

Die beiden hier aufgeführten bedingten Anweisungen sind nicht besser als die anderen. Ihre Nutzung hängt von der Situation ab. Sie haben übrigens einen Tippfehler im 2. Beispiel. Nach dem Ausrufezeichen sollte nur ein Gleichheitszeichen stehen.

Das erste Beispiel ermittelt, ob der Wert in myVar wahr ist, und führt den Code innerhalb von {...} aus

Im zweiten Beispiel wird ausgewertet, ob myVar nicht gleich null ist. Wenn dieser Fall zutrifft, wird Ihr Code innerhalb von {...} ausgeführt.

Ich schlage vor, in bedingten Aussagen nach weiteren Techniken zu suchen. Sobald Sie mit ihnen vertraut sind, können Sie entscheiden, wann Sie sie benötigen.


12
Das ist im zweiten Beispiel wahrscheinlich kein Tippfehler. Diese Sekunde =ist entscheidend und macht einen großen Unterschied in der Frage. Vielleicht sind Sie sich der Existenz !==und der ===Operatoren in JavaScript nicht bewusst ?
Tim Down

1
Vielen Dank für den Hinweis. Ich dachte sofort, es sei ein Tippfehler, aber erinnere mich jetzt an das, was ich seit einiger Zeit nicht mehr gesehen und vergessen habe.
DER ARZT
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.