it-swarm.com.de

Javascript: Im Vergleich zu null -! == vs! =

Ok, also habe ich Linter auf meinem Sublime-Editor installiert, während ich an meiner node.js-App gearbeitet habe. Eines der Dinge, die aufgefangen wurden, besagte, dass ich immer! == verwenden sollte, um ein Objekt mit null zu vergleichen (ich verwende normalerweise! =).

Also habe ich es geändert ... aber dann habe ich gemerkt, dass das! == nicht funktioniert hat.

Ich habe dieses Szenario:

var x = null;
if (x !== null)
    console.log('x is not equal to null');

Wenn ich das! == verwende, gibt die Konsole diese Zeile aus, obwohl dies offensichtlich nicht der Fall ist. Als ich es wieder auf! Gestellt habe, hat es sich normal verhalten.

Meine Frage ist also, warum linter mir sagt, dass ich es benutzen soll! == wenn es nicht das tut, was ich will ...

Ich weiß, dass mir etwas fehlt.


[~ # ~] update [~ # ~] Ok, es könnte etwas komplizierter sein, als ich ursprünglich gedacht habe. In meinem echten Code habe ich! == mit dem GLOBAL-Objekt node.js verwendet.

console.log('Global User: ' + GLOBAL.User);

if (GLOBAL.User != null)
{
    console.log('User is not null');
}

Die Konsolenzeile wird gedruckt, auch wenn GLOBAL.User null ist ...

Vielleicht ist dieses Objekt etwas Besonderes?



Update 2

Ok, nachdem ich die Kommentare gelesen und meinen Code durchgesehen habe, habe ich gelernt, dass! == Probleme haben kann, wenn das Objekt undefiniert und nicht null ist (siehe diesen Beitrag: Warum ist null ein Objekt und was ist der Unterschied? zwischen null und undefined? ).

In meinem Fall könnte meine globale Variable je nach Aufruf dieser Methode undefiniert, null oder voller Daten sein. Ich gehe zurück und aktualisiere meinen Code so, dass er niemals undefiniert ist. Dann wird! == konsistent funktionieren.

Danke für die Hilfe!


Danke, David

26
David

Ihre global.User ist undefined, nicht null. Beim Benutzen == sie bewerten gleich, aber mit === Die Elemente, die Sie vergleichen, müssen vom selben Typ sein. undefined hat den Typ undefined und null hat den Typ object.

undefined und null sind sich sehr ähnlich, bedeuten aber im Allgemeinen zwei sehr unterschiedliche Dinge. Normalerweise ist undefined das Ergebnis, wenn einem Objekt kein Wert zugewiesen wurde, während null einen Wert hat und der Wert explizit auf "nichts" gesetzt ist.

33
loganfsmyth

Der einzige Wert, der in JavaScript nicht gleich ist, ist NaN. Wenn null === null ist false, dann hat Ihre JavaScript-Engine ernsthafte Probleme;)

Verwenden Sie immer geschweifte Klammern, um sicherzustellen, dass Ihre bedingte Anweisung richtig geschrieben ist.

var x = null;
if (x !== null) {
    console.log('x is not equal to null');
}
12
plalx

Es ist noch einfacher

var x = null;
    if (x) 6 
    if (!x) 7

das Ergebnis ist

undefined
7
4
oshribr