2013-04-25 6 views
18

Ok, also habe ich Linter auf meinem Sublime Editor installiert, während ich an meiner node.js App arbeite. Eines der Dinge, die es gefangen hat, besagt, dass ich immer! == verwenden sollte, um ein Objekt mit null zu vergleichen (normalerweise verwende ich! =).Javascript: Im Vergleich zu null -! == vs! =

Also änderte ich es ... aber dann bemerkte ich, dass das! == nicht funktionierte.

Ich habe dieses Szenario:

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

Wenn ich die == die diese Zeile gedruckt Konsole, obwohl es offensichtlich war nicht wahr!. Als ich es wieder auf "!" Stellte, verhält es sich normal.

Also meine Frage ist, warum ist mir Linter sagen zu verwenden! == wenn es nicht tun, was ich will es ...

Ich weiß, ich bin etwas fehlt.


UPDATE Ok, so dass es ein bisschen mehr sein kann komplizierter, als ich ursprünglich dachte. In meinem echten Code benutzte ich! == mit dem node.js GLOBAL-Objekt.

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

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

Die Zeilenkonsole druckt, selbst wenn GLOBAL.User null ist ...

Vielleicht ist dieses Objekt besonders?



Update 2

Ok, so dass nach dem Lesen der Kommentare durch und Blick auf mein Code, ich gelernt habe! == Probleme haben kann, wenn das Objekt nicht definiert ist und nicht null (siehe diesen Beitrag: Why is null an object and what's the difference between null and undefined?).

In meinem Fall könnte meine globale Variable je nachdem, wann diese Methode aufgerufen wird, undefined, null oder voll von Daten sein. Ich werde zurückgehen und meinen Code aktualisieren, so dass er nie undefiniert ist und dann! == wird konsequent funktionieren.

Danke für die Hilfe!


Danke, David

+2

ist [Works für mich.] (Http://jsfiddle.net/zA4Du/) – 0x499602D2

+0

Können Sie Ihr Experiment wiederholen. Mein x === null, wenn ich Ihren Code mache. Beachten Sie, dass null == undefined ist wahr. null === undefined ist falsch. JavaScript macht Spaß! –

+0

Siehe auch http://stackoverflow.com/questions/801032/why-is-null-an-object-and-whats-the-difference-compared-to-undefined – mrk

Antwort

20

Ihre global.User ist undefined, nicht null. Wenn Sie == verwenden, werden sie als gleich bewertet, aber mit === müssen die Elemente, die Sie vergleichen, vom gleichen Typ sein. undefined hat den Typ undefined und null hat den Typ object.

undefined und null sind sehr ähnlich, aber sie bedeuten in der Regel zwei sehr unterschiedliche Dinge. Normalerweise ist undefined das Ergebnis, wenn etwas keinem Wert zugewiesen wurde, während null einen Wert hat und der Wert explizit auf "nichts" gesetzt ist.

+0

Also ... wenn ein Objekt je nach Situation entweder undefiniert oder null sein könnte, ist es sicherer == als ===? – David

+4

@David Im Allgemeinen würde ich die Mehrdeutigkeit vermeiden und sicherstellen, dass sie auf "null" initialisiert ist. Wie bei jeder Situation, die wenigen möglichen Faktoren, die Sie berücksichtigen müssen, ist es einfacher, über ein Problem zu begründen. – loganfsmyth

10

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

Um sicherzustellen, dass Ihre bedingte Anweisung gut geschrieben ist, verwenden Sie immer die geschweiften Klammern.

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

Es ist noch einfacher

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

das Ergebnis

undefined 
7 
Verwandte Themen