Почему условие if в JavaScript работает неправильно?

Я сравниваю даты в JavaScript и столкнулся с проблемой. У меня есть переменная startDate, которая пустая "" (это видно в консоли браузера). По логике моего кода первое условие не должно выполняться, потому что startDate равна пустой строке, но почему-то сообщение alert("Выполнилось первое условие"); все равно показывается. Не могу понять в чем ошибка.

if(startDate != null || startDate != ""){
    if( (startDate != null || endDate != "") && (startDate < endDate)){
        alert("Выполнилось первое условие");
        return;
    }
    else{
        alert("Выполнилось второе условие");
        return;
    }
}

Этот код находится внутри цикла while, поэтому использую return для выхода.

Проблема в операторе ИЛИ (||). Пустая строка startDate не равна null, поэтому первая часть startDate != null возвращает true, и вся проверка проходит. Замени ИЛИ на И (&&): if(startDate != null && startDate != ""). Кстати, как эта переменная вообще заполняется?

да, ребята правы про ||, но объясню проще. В javascript логика такая: если хоть одна часть с || true, то всё условие срабатывает. У тебя “” не равна null (это правда), значит первая часть уже true и дальше не смотрит. Проще всего - поменяй на if(startDate && startDate != "") или вообще if(startDate.trim()) если пробелы тоже убрать надо. Такие баги часто бывают, не парься)

Твоя логика сломана из-за ||. Когда startDate = “”, условие startDate != null возвращает true (пустая строка не null), и код выполняется. Замени на if(startDate != null && startDate != "") или просто if(startDate) - так проверишь и null, и пустую строку разом.