Логические операторы
JavaScript простым языком
Last updated
Was this helpful?
JavaScript простым языком
Last updated
Was this helpful?
Тема тоже очень важная и одна из фундаментальных.
Существует всего три логических оператора.
Логические операторы: ||
, &&
, !
Идём по порядку.
Данный оператор представляет собой две палки колбасы и, если, его называть по-русски, читая код, то он читается как ИЛИ. Он используется всегда с 2-я операндами (аргументами), т.е. является бинарным.
Результат работы этого оператора – логическое значение true
или false
.
Если хотя бы один из операндов (аргументов) дает логическое true
, то и всё выражение в целом будет возвращать истину
. Пример:
Из примера понятно, что, если один из аргументов возвращает true
, то все выражение в условии возвращает истину
. Еще один пример:
Здесь все отработает ровно так же. После приведения типов, переменная a
выдаст значение true
, а переменная b
вернет значение false
, но т.к., выполнилось правило и один из аргументов возвращает true
, то это означает, что условие будет выполнено.
Чтобы условие с оператором ||
не выполнилось нужно, чтобы оба операнда (аргумента) возвращали false
.
Более или менее жизненный пример. Представь, у тебя есть форум, на котором у каждого пользователя есть возможность прикреплять файлы к сообщению. Но эта возможность доступна не каждому пользователю, а только при выполнении определенных условий: пользователю не меньше 21
года или он написал более 500
сообщений.
Код:
Несмотря на то, что пользователю меньше 21
года условие выполнится, потому что он написал более 500 сообщений
.
Еще пример:
В этом случае условие не выполнится, потому что ни одно из условий внутри if
не вернуло логическое значение true
.
Этот оператор более придирчивый чем ||
. Если оператору ИЛИ нужно хотя бы одно истинное значение, то оператор И не потерпит никаких false
– всё должно быть true
и только так. Только когда все операнды возвращают значение true
, оператор &&
вернет true
.
Пример:
Возьмем тот же пример с форумом и переделаем под оператор И. Получается, что условия задачи меняются: чтобы пользователь мог прикреплять файлы к сообщению ему должно быть больше 21
года и он должен написать более
500 сообщений
.
Здесь ты потерпишь фиаско, т.к., пользователю менее 21
года. Дальше JavaScript даже второе условие проверять не будет, потому как первое уже зафейлилось и вернуло false
.
Данный оператор не похож на первые два, но также очень важен.
Оператор является унарным, т.е., применяется он только к одному операнду (аргументу). Ставится оператор всегда перед аргументом.
Все что делает оператор можно описать в 2-х шагах:
Приводит операнд (аргумент) к логическому значению (true/false
);
Возвращает логическое значение противоположное тому, что получил в шаге 1
.
Сразу же простой пример:
Надеюсь все понятно. Поэтому сразу же перейду ко второй способности этого оператора. Можно взять и поставить два знака !!
перед аргументом. Что произойдет в этом случае? Не читай ответ, а подумай, основываясь на том, что ты уже прочитал об операторе. Итак, барабанная дробь! А произойдет следующее:
Первый знак !
приведет аргумент к логическому значению;
Затем вернет противоположное логическое значение полученное в шаге 1
и на этом полномочия первого оператора НЕ завершатся;
Второй оператор НЕ проделает те же 2
шага и вторым шагом снова приведет к значению (вернув его).
Да что за…? Да-да, здесь все просто на самом деле. Данный метод используют очень часто при преобразовании в логический тип, вместо функции Boolean(..)
. Сам подумай, насколько проще написать так:
Нежели так:
В первом случае запись короче, а смысл абсолютно не меняется.
Задача:
Пользователю с помощью функции prompt
предлагается ввести возраст
.
Если возраст больше 18
лет, то с помощью еще одного prompt
, нужно запросить имя пользователя.
Все эти данные нужно сохранить в переменных
.
Как только ты получишь от пользователя все необходимые данные, ты должен сделать следующие проверки: если пользователю больше 25
лет и его имя John
, ты должен с помощью функции alert()
вывести фразу "Welcome, John"
. В противном случае ты должен вывести ему фразу "Who are you? I don't know you"
.