Ok, więc zainstalowałem Linter na moim edytorze Sublime podczas pracy nad aplikacją node.js. Jedna z rzeczy, które złapała powiedziała, że powinienem zawsze używać! == aby porównać obiekt do wartości null (zwykle używam! =).JavaScript: w porównaniu do wartości null -! == vs! =
Więc zmieniłem to ... ale potem zauważyłem, że! == nie działa.
mam ten scenariusz:
var x = null;
if (x !== null)
console.log('x is not equal to null');
Kiedy używać == konsola wydrukowane tej linii, mimo że nie było oczywiście prawdą!. Kiedy przełączyłem go z powrotem na! = Zachowywał się normalnie.
Więc moje pytanie jest, dlaczego jest linter każe mi używać! == jeśli nie to, co Ja chcę, żeby ...
wiem, że czegoś brakuje.
UPDATE Ok, więc może być nieco bardziej skomplikowana, niż się początkowo wydawało. W moim prawdziwym kodzie użyłem! == z obiektem GLOBAL node.js.
console.log('Global User: ' + GLOBAL.User);
if (GLOBAL.User != null)
{
console.log('User is not null');
}
konsoli odbitek linii nawet gdy GLOBAL.User jest null ...
Może ten obiekt jest wyjątkowy?
Aktualizacja 2
Ok, więc po przeczytaniu komentarzy i patrząc na mojego kodu, nauczyłem się tego! == może mieć problemy, jeśli obiekt jest raczej nieokreślone niż wartość null (patrz: ten post: Why is null an object and what's the difference between null and undefined?).
Tak, w moim przypadku, moja zmienna globalna może być, w zależności od tego, kiedy ta metoda jest wywoływana, niezdefiniowana, pusta lub pełna danych. Mam zamiar wrócić i zaktualizować mój kod, aby nigdy nie był niezdefiniowany, a następnie! == będzie działać konsekwentnie.
Dzięki za pomoc!
Dzięki David
[pracuje dla mnie.] (Http://jsfiddle.net/zA4Du/) – 0x499602D2
Nie można powtórzyć eksperyment. Mój x === null, gdy wykonuję twój kod. Należy zauważyć, że null == undefined ma wartość true. null === undefined jest fałszywe. JavaScript jest zabawny! –
Zobacz także http://stackoverflow.com/questions/801032/why-is-null-an-object-and-whats-the-difference-compared-to-undefined – mrk