ZakkMalin
@ZakkMalin
Designer

Для чего логический оператор «!» (NOT) возле переменной с булевым значением?

Вопрос нубский, нубее некуда.

Есть ли простой жизненный пример, в котором было бы полезно переключить true на false?

В книге приведён достаточно непонятный юзкейс, какой смысл менять выходные на будни, чтобы не "принять сегодня душ":
/*
! — just means “not.” You can call it “not,” but lots of people call it
“bang.” (An exclamation point is sometimes called a bang.) Use it
to turn false into true or true into false. This is useful for working
with values that are opposites. For example:
*/

var isWeekend = true;
var needToShowerToday = !isWeekend;
needToShowerToday;
false

/*
In this example, we set the variable isWeekend to true. Then
we set the variable needToShowerToday to !isWeekend. The bang
converts the value to its opposite—so if isWeekend is true, then
!isWeekend is not true (it’s false). So when we ask for the value of
needToShowerToday, we get false (you don’t need to shower today,
because it’s the weekend).
*/

༼ つ ◕_◕ ༽つ
5d116efd0ff3d507435500.png
  • Вопрос задан
  • 483 просмотра
Решения вопроса 3
JRK_DV
@JRK_DV
Рецепты https://codepen.io/jrkdv/full/LKLXdq
Для чего логический оператор «!» (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, меняем на противоположное и присваиваем
}


на самом деле таких кейсов много может быть, зависит только от ваших фантазий
Ответ написан
Комментировать
@insiderto
Логические конструкции, в основном, используются для условий (if-else) и циклов (while, for). В вашем случае, вы не меняете "выходные на будние", а получаете новую переменную, которая зависит от того, выходной ли сейчас. Понятным языком все это выглядит как: принять сегодня душ? Да - если НЕ (!) "выходной", нет - если "выходной".
Ответ написан
Комментировать
Minifets
@Minifets
Hello world!!!
Для чего логический оператор «!» (NOT) возле переменной с булевым значением?


Чтобы инвертировать его, или как вы сказали переключить с true на false и обратно.
Пример:
if (isAdmin) {
    // Ничего не делаем.
} else {
    // Блокируем доступ к ресурсу.
}

Намного удобнее записать как:
if (!isAdmin) {
    // Блокируем доступ к ресурсу.
}


В случае, если оператор ! стоит не перед bool, то он еще и приводит тип данных к bool.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
18 апр. 2024, в 12:52
500000 руб./за проект
18 апр. 2024, в 12:48
6000 руб./за проект
18 апр. 2024, в 12:41
3000 руб./за проект