Конструкция if-else и булевы значения

Пусть у нас есть какая-то булева переменная, которая может принимать значения true или false:

let test = true;

Давайте напишем if, проверяющий нашу переменную на значение true:

let test = true; if (test === true) { alert('верно'); } else { alert('неверно'); }

Если переменная test равна true, то выведите на экран слово 'верно', иначе выведите слово 'неверно'.

Если переменная test равна false, то выведите на экран слово 'верно', иначе выведите слово 'неверно'.

Логические значения и двойное равно

В предыдущем примере я использовал для сравнения оператор ===. В этом случае наша переменная сравнивалась на равенство true как по значению, так и по типу.

В нашей задаче можно использовать и оператор ==. Если в переменной test всегда будет одно из значений true или false, то ничего и не изменится:

let test = true; // тут пишем или true, или false if (test == true) { alert('верно'); } else { alert('неверно'); }

А вот если в переменную test могут попадать любые значения, то все становится намного сложнее.

В таком случае, если в переменной test будет не булево значение, то это значение вначале будет преобразовано к булеву и только затем будет сравниваться.

Пусть, например, в переменной test будет число 1. В этом случае оно вначале преобразуется к логическому типу, то есть к true. И затем будет выполнено сравнение:

let test = 1; if (test == true) { alert('верно'); // сработает этот alert, тк 1 == true - это верно } else { alert('неверно'); }

А вот, к примеру, число 0 преобразуется к false. И наше условие в результате выведет 'неверно':

let test = 0; if (test == true) { alert('верно'); } else { alert('неверно'); // сработает этот alert, тк 0 == true - это НЕверно }

Напомню вам значения, которые при приведению к логическому типу дают false: 0, -0, +0, null, false, NaN, undefined, '' (пустая строка).

Не запуская код, определите, что выведется на экран:

let test = 1; if (test == true) { alert('верно'); } else { alert('неверно'); }

Не запуская код, определите, что выведется на экран:

let test = 0; if (test == true) { alert('верно'); } else { alert('неверно'); }

Не запуская код, определите, что выведется на экран:

let test = 1; if (test == false) { alert('верно'); } else { alert('неверно'); }

Не запуская код, определите, что выведется на экран:

let test = 1; if (test != true) { alert('верно'); } else { alert('неверно'); }

Не запуская код, определите, что выведется на экран:

let test = ''; if (test == false) { alert('верно'); } else { alert('неверно'); }

Не запуская код, определите, что выведется на экран:

let test; if (test == true) { alert('верно'); } else { alert('неверно'); }

Не запуская код, определите, что выведется на экран:

let test = 3 * 'a'; if (test == true) { alert('верно'); } else { alert('неверно'); }

Сокращенный иф

Пусть, к примеру, мы хотим узнать, равна ли переменная test значению true. В этом случае конструкцию if можно записать так:

let test = true; if (test == true) { alert('верно'); } else { alert('неверно'); }

При программировании такие проверки требуются очень часто, поэтому для них существует более изящная сокращенная форма: вместо if (test == true) можно написать просто if (test).

Давайте перепишем наш код в сокращенной форме:

let test = true; if (test) { // эквивалентно if (test == true) alert('верно'); } else { alert('неверно'); }

Пусть теперь мы проверяем на то, что переменная test не равна true:

let test = true; if (test != true) { alert('верно'); } else { alert('неверно'); }

В этом случае сокращенный синтаксис будет выглядеть так:

let test = true; if (!test) { // используем логическое НЕ alert('верно'); } else { alert('неверно'); }

Аналогичное сокращение существует и для проверки на false.

Пусть дан вот такой код:

let test = true; if (test == false) { alert('верно'); } else { alert('неверно'); }

Условие test == false на самом деле все равно, что test != true:

let test = true; if (test != true) {// эквивалентно if (test == false) alert('верно'); } else { alert('неверно'); }

Ну, а такое условие мы уже научились сокращать в предыдущем примере. Сократим:

let test = true; if (!test) { alert('верно'); } else { alert('неверно'); }

Перепишите следующий код с использованием сокращенного сравнения:

let test = true; if (test == true) { alert('верно'); } else { alert('неверно'); }

Перепишите следующий код с использованием сокращенного сравнения:

let test = true; if (test == false) { alert('верно'); } else { alert('неверно'); }

Перепишите следующий код с использованием сокращенного сравнения:

let test = true; if (test != true) { alert('верно'); } else { alert('неверно'); }

Перепишите следующий код с использованием сокращенного сравнения:

let test = true; if (test != false) { alert('верно'); } else { alert('неверно'); }

Нюанс

Учтите, что в сокращенных операциях сравнение идет по ==, а не по ===.

Не запуская код, определите, что выведется на экран:

let test = 3; if (test) { alert('верно'); } else { alert('неверно'); }

Не запуская код, определите, что выведется на экран:

let test = 'abc'; if (test) { alert('верно'); } else { alert('неверно'); }

Не запуская код, определите, что выведется на экран:

let test = ''; if (test) { alert('верно'); } else { alert('неверно'); }

Не запуская код, определите, что выведется на экран:

let test = 3 * 'abc'; if (test) { alert('верно'); } else { alert('неверно'); }

Не запуская код, определите, что выведется на экран:

let test = null; if (test) { alert('верно'); } else { alert('неверно'); }

Не запуская код, определите, что выведется на экран:

let test = false; if (test) { alert('верно'); } else { alert('неверно'); }

Не запуская код, определите, что выведется на экран:

let test; if (test) { alert('верно'); } else { alert('неверно'); }

Не запуская код, определите, что выведется на экран:

let test = 0; if (test) { alert('верно'); } else { alert('неверно'); }

Не запуская код, определите, что выведется на экран:

let test = '0'; if (test) { alert('верно'); } else { alert('неверно'); }

Не запуская код, определите, что выведется на экран:

let test = -1; if (test) { alert('верно'); } else { alert('неверно'); }