Итак, я установил Linter на свой редактор Sublime, работая над моим приложением node.js. Одна из вещей, которые он поймал, сказал, что я всегда должен использовать! == сравнить объект с нулем (я обычно использую! =).Javascript: Сравнение с null -! == vs! =
Так что я изменил его ... но потом я заметил, что! == не работает.
У меня есть такой сценарий:
var x = null;
if (x !== null)
console.log('x is not equal to null');
Когда я использую == консоль печататься эту строку, даже если это было явно не так!. Когда я переключил его обратно на! = Он вел себя нормально.
Так что мой вопрос, почему ЛИНТЕР говорит мне использовать! ==, если он не делает то, что я хочу, чтобы ...
Я знаю, что я что-то отсутствует.
UPDATE Ok, так что это может быть немного сложнее, чем я думал. В моем реальном коде я использовал! == с объектом node.js GLOBAL.
console.log('Global User: ' + GLOBAL.User);
if (GLOBAL.User != null)
{
console.log('User is not null');
}
на консоль принтов линии, даже когда GLOBAL.User является нулевым ...
Возможно, этот объект является особенным?
Update 2
Итак, после прочтения через комментарии и глядя на мой код, я узнал, что! == могут возникнуть проблемы, если объект не определен, а не нулевой (см. этот пост: Why is null an object and what's the difference between null and undefined?).
В моем случае моя глобальная переменная может быть в зависимости от того, когда этот метод вызывается, неопределенного, нулевого или полного данных. Я собираюсь вернуться и обновить свой код, чтобы он никогда не был неопределенным, а затем! == будет работать последовательно.
Спасибо за помощь!
Спасибо, Дэвид
[Работы для меня.] (Http://jsfiddle.net/zA4Du/) – 0x499602D2
Невозможно повторить свой эксперимент. Мой x === null, когда я делаю ваш код. Обратите внимание, что null == undefined - true. null === undefined is false. JavaScript - это весело! –
См. Также http://stackoverflow.com/questions/801032/why-is-null-an-object-and-whats-the-difference-compared-to-undefined – mrk