Итак, я установил Linter в свой редактор Sublime во время работы над моим приложением node.js. Одна из вещей, которые он поймал, сказал, что я всегда должен использовать! == для сравнения объекта с нулем (я обычно использую! =).
Итак, я изменил его... но потом я заметил, что! == не работал.
У меня такой сценарий:
var x = null;
if (x !== null)
console.log('x is not equal to null');
Когда я использую! ==, консоль напечатала эту строку, хотя это явно не соответствует действительности. Когда я переключил его обратно на!= Он вел себя нормально.
Так что мой вопрос в том, почему linter говорит мне использовать! == если он не делает то, что я хочу, чтобы он...
Я знаю, что чего-то не хватает.
UPDATE Хорошо, так что это может быть немного сложнее, чем я думал изначально. В моем реальном коде я использовал! == с объектом node.js GLOBAL.
console.log('Global User: ' + GLOBAL.User);
if (GLOBAL.User != null)
{
console.log('User is not null');
}
Строка консоли печатается даже тогда, когда GLOBAL.User имеет значение null...
Возможно, этот объект особенный?
Обновление 2
Хорошо, поэтому, прочитав комментарии и посмотрев на мой код, я узнал, что! == могут иметь проблемы, если объект undefined, а не null (см. этот пост: Почему нулевой объект и какая разница между нулем и undefined?).
Итак, в моем случае моя глобальная переменная может быть в зависимости от того, когда вызывается этот метод, undefined, null или полной данных. Я собираюсь вернуться и обновить свой код, чтобы он никогда не был undefined, а затем! == будет работать последовательно.
Спасибо за помощь!
Спасибо, Дэвид