Для чего логический оператор «!» (NOT) возле переменной с булевым значением?
Для чего логический оператор «!» (NOT) возле переменной с булевым значением?
не обязательно переменная может быть булевым значением.function example(user) {
  // Если пользователя нет, то user->undefined->false
  // Логическим оператором отрицания мы "поменяем" false на true и выйдем из функции
  if (!user) return;
  // Тут какой-то код, когда user->object (пользователь есть)
  // т.к. user->object->true, то при отрицании в условие попадёт: user->object->true->false
}
ещё кейс:
поменять значение на противоположное, например, при нажатии кнопки должна сниматься или устанавливаться меткаcheck = true;
function handlerClick() {
  check = !check;
  // То есть берём текущее значение check, меняем на противоположное и присваиваем
}на самом деле таких кейсов много может быть, зависит только от ваших фантазий
Логические конструкции, в основном, используются для условий (if-else) и циклов (while, for). В вашем случае, вы не меняете "выходные на будние", а получаете новую переменную, которая зависит от того, выходной ли сейчас. Понятным языком все это выглядит как: принять сегодня душ? Да - если НЕ (!) "выходной", нет - если "выходной".