Ok, quindi ho installato Linter sul mio editor Sublime mentre lavoravo alla mia app node.js. Una delle cose che ha scoperto ha detto che dovrei sempre usare! == per confrontare un oggetto con null (di solito uso! =).Javascript: Confronto con null -! == vs! =
Quindi l'ho modificato ... ma poi ho notato che! == non funzionava.
ho questo scenario:
var x = null;
if (x !== null)
console.log('x is not equal to null');
Quando uso il == la console stampato che la linea, anche se non era ovviamente vero!. Quando l'ho commutato su! = Si è comportato normalmente.
Quindi la mia domanda è: perché è linter che mi diceva di usare! == se non fare quello che voglio che ...
So che mi manca qualcosa.
UPDATE Ok, quindi potrebbe essere un po 'più complicato di quanto inizialmente pensato. Nel mio codice reale stavo usando! == con l'oggetto GLOBAL node.js.
console.log('Global User: ' + GLOBAL.User);
if (GLOBAL.User != null)
{
console.log('User is not null');
}
Le linee stampe console anche quando GLOBAL.User è NULL ...
Forse questo oggetto è speciale?
Update 2
Ok, quindi dopo aver letto attraverso i commenti e guardando il mio codice, ho imparato che! == può avere problemi se l'oggetto non è definito, piuttosto che nulla (vedi questo post: Why is null an object and what's the difference between null and undefined?).
Quindi nel mio caso, la mia variabile globale potrebbe essere, a seconda di quando viene chiamato questo metodo, indefinito, null o pieno di dati. Ho intenzione di tornare indietro e aggiornare il mio codice in modo che non sia mai indefinito e quindi! == funzionerà in modo coerente.
Grazie per l'aiuto!
Grazie, David
[funziona per me.] (Http://jsfiddle.net/zA4Du/) – 0x499602D2
in grado di ripetere l'esperimento. My x === null quando faccio il tuo codice. Si noti che null == undefined è vero. null === undefined è falso. JavaScript è divertente! –
Vedere anche http://stackoverflow.com/questions/801032/why-is-null-an-object-and-whats-the-difference-compared-to-undefined – mrk