Компас D-Lab · Основы JavaScript · занятие 2

Условия: сравнения, if и else, логические операторы

Учим программу принимать решения: сравниваем значения, выбираем ветку с помощью if, else и else if, объединяем условия через &&, || и !.

90 минут

Введение · 4 минуты

Программа принимает решения

Программы первого занятия выполняли все команды подряд, сверху вниз. Настоящей программе часто нужно выбирать: пустить пользователя или нет, похвалить или подсказать, продолжать игру или остановить её.

Выбор делается с помощью условия. Программа проверяет утверждение, например «введённое число больше загаданного». Если утверждение истинно, выполняется одна группа команд, если ложно — другая.

Из занятия 1 понадобятся: prompt возвращает строку, Number(...) превращает строку в число, % даёт остаток от деления, ошибки видны в консоли F12.
сравненияif и elseelse if&&, || и !отмена prompt

Я загадал число от 1 до 20

Ответ выбирает настоящий JavaScript

if (guess === secret) {
  title = "Угадали!";
} else if (guess < secret) {
  title = "Загаданное число больше";
} else {
  title = "Загаданное число меньше";
}

К концу занятия вы напишете такую игру сами.

Сравнения и if · 6 минут

Операторы сравнения

Оператор сравнения проверяет два значения и возвращает логическое значение: true (истина), если утверждение верно, или false (ложь), если неверно. Логический тип вы уже видели в таблице типов на первом занятии.

ОператорЗначениеПримерРезультат
>больше7 > 3true
<меньше7 < 3false
>=больше или равно4 >= 4true
<=меньше или равно5 <= 4false
===строго равно10 === 10true
!==строго не равно10 !== 10false

Строгое равенство учитывает тип

5 === 5        // true
5 === "5"      // false: число и строка
"кот" === "кот" // true
"Кот" === "кот" // false: регистр важен
Не путайте: один знак = — присваивание, он кладёт значение в переменную. Три знака === — сравнение, оно отвечает «да» или «нет».
Почему не ==? Двойное равенство перед сравнением само превращает типы, поэтому 5 == "5" даёт true. Такие неявные превращения приводят к ошибкам, поэтому в курсе мы всегда пишем === и !==.

Сравнения и if · 6 минут

Условие if и ветка else

Инструкция if («если») выполняет блок команд только тогда, когда условие в круглых скобках истинно. Блок else («иначе») необязателен: он выполняется, когда условие ложно. Из двух блоков всегда выполняется ровно один.

let age = Number(prompt("Сколько вам лет?"));

if (age >= 14) {
  alert("Можно получить паспорт");
} else {
  alert("Паспорт выдают с 14 лет");
}

console.log("Проверка закончена");

Последняя строка стоит после всего условия, поэтому выполняется в любом случае.

Как прочитать код

if (…)В круглых скобках условие. Его результат — true или false.
{ … }Фигурные скобки ограничивают блок: все команды внутри выполняются вместе.
else { … }Блок для случая, когда условие ложно. Своего условия у else нет.
отступКоманды внутри блока сдвигают на два пробела. JavaScript отступы не проверяет, но с ними код легче читать.
Типичная ошибка: точка с запятой после скобок if (age >= 14); завершает инструкцию if, и следующий блок выполняется всегда. После ) и после } точку с запятой не ставят.

Тренажёр · уровень 1 из 3

Соедините оператор и его значение

Выберите оператор слева, затем подходящее значение справа. Одинаковые номера обозначают созданную пару. Каждое значение подходит ровно одному оператору.

Тренажёр · уровень 2 из 3

Соберите программу «Проверка пароля»

Программа должна показать «Доступ разрешён», если введён пароль 1234, и «Неверный пароль» в остальных случаях. Перетащите карточку в пропуск или выберите карточку щелчком, а затем нажмите на нужный пропуск. Щелчок по заполненному пропуску освобождает его. Две карточки лишние.

let answer = prompt("Введите пароль:");
(answer "1234")
alert("Доступ разрешён");
} {
alert("Неверный пароль");
}

Тренажёр · уровень 3 из 3

Допишите программу «Чётное или нечётное»

Программа спрашивает целое число и выводит в консоль, чётное оно или нет. Число чётное, если остаток от его деления на 2 равен 0. Скобки, кавычки и числа уже стоят в коде: в каждое поле вводите только одно слово или один оператор.

let n = (prompt("Введите целое число:"));
(n 2 0) {
  console.log("чётное");
} {
  console.log("нечётное");
}
  1. Функция, которая превращает строку из prompt в число.
  2. Ключевое слово, с которого начинается условие.
  3. Оператор, который возвращает остаток от деления.
  4. Оператор строгого равенства.
  5. Ключевое слово для блока, который выполняется, когда условие ложно.

Самостоятельная работа · 17 минут

Программы «Проверка пароля» и «Чётное число»

Работайте по порядку и набирайте код сами. Код из шагов 2–6 пишите внутри <script>, каждую новую часть — под предыдущей. После каждого шага сохраняйте файл, обновляйте страницу и отмечайте выполненное.

Цель: файл index.html, который проверяет пароль и сообщает, чётное ли введённое число. Ошибка в условии найдена и исправлена.
1Создайте файл страницы

Создайте папку JS-2 и в ней файл index.html, как на первом занятии. Наберите основу с пустым скриптом перед </body>:

<!doctype html>
<html lang="ru">
<head>
  <meta charset="UTF-8">
  <title>Условия</title>
</head>
<body>
  <h1>Условия</h1>
  <script>

  </script>
</body>
</html>
2Спросите пароль

Внутри <script> объявите переменную password через let и сохраните в неё ответ prompt. Выведите её в консоль:

let password = prompt("Введите пароль:");
console.log(password);
3Напишите условие с двумя ветками

Под командой console.log напишите инструкцию if … else. Комментарии в заготовке подсказывают, что поставить на место каждого пропуска:

if (/* сравните password со строкой "1234" оператором === */) {
  // alert с текстом «Доступ разрешён»
} else {
  // alert с текстом «Неверный пароль»
}

Строку "1234" пишите в кавычках: prompt возвращает строку. Проверьте два случая: 1234 → «Доступ разрешён», 12345 → «Неверный пароль».

4Эксперимент: число вместо строки

Временно уберите кавычки: password === 1234. Снова введите 1234. Какое окно появилось и почему? Ответ запишите комментарием // ... над условием, затем верните кавычки.

5Определите, чётное ли число

Закомментируйте код пароля знаками //, чтобы окно не мешало. Ниже напишите вторую программу. Число получите через Number(prompt(...)), а в условии сравните остаток n % 2 с нулём:

let n = Number(prompt("Введите целое число:"));

if (/* остаток от деления n на 2 строго равен 0 */) {
  console.log(n + " — чётное");
} else {
  // выведите в консоль: n + " — нечётное"
}

Проверьте три числа: 10 → «10 — чётное», 7 → «7 — нечётное», 0 → «0 — чётное».

6Найдите ошибку присваивания

Замените в условии === на один знак = и обновите страницу. В консоли появится красная ошибка SyntaxError с номером строки: присвоить значение выражению n % 2 нельзя. Найдите эту строку и верните ===.

★Дополнительно: защита от ввода букв

Если ввести abc, функция Number вернёт особое значение NaN («не число»), и программа ответит «нечётное». Добавьте перед проверкой чётности отдельное условие: if (Number.isNaN(n)) { … } с сообщением «Это не число», а проверку чётности перенесите в его блок else.

Перерыв · 8 минут

Программа умеет выбирать

Перед перерывом проверьте: файл index.html сохранён, в консоли нет красных сообщений, программа чётности даёт верный ответ для чисел 10, 7 и 0.

Файл не закрывайте: после перерыва мы продолжим работать в нём.

После перерыва

Научимся выбирать из нескольких вариантов с помощью else if, объединять условия словами «и», «или», «не» и обрабатывать нажатие «Отмена» в окне prompt.

Цепочки и логика · 5 минут

Несколько вариантов: else if

Когда вариантов больше двух, условия соединяют в цепочку if … else if … else. Условия проверяются строго сверху вниз. Выполняется блок первого истинного условия, остальные пропускаются. Блок else в конце срабатывает, если ни одно условие не оказалось истинным.

let t = Number(prompt("Температура на улице?"));

if (t >= 25) {
  alert("Жарко");
} else if (t >= 10) {
  alert("Тепло");
} else if (t >= 0) {
  alert("Прохладно");
} else {
  alert("Мороз");
}

При t = 30 истинны все три условия, но выполнится только первый блок: «Жарко».

Порядок условий важен

// Ошибка: первое условие перехватывает всё
if (t >= 0) {
  alert("Прохладно");
} else if (t >= 25) {
  alert("Жарко"); // сюда программа не попадёт
}
Правило: при проверке порогов «больше или равно» начинайте с самого большого порога и идите к меньшему. Тогда каждое следующее условие проверяется только для оставшихся значений.

Цепочки и логика · 6 минут

Логические операторы: &&, ||, !

Логические операторы объединяют несколько условий в одно или переворачивают условие. Их операнды и результат — логические значения.

ОператорЧитаетсяРезультат true, когда…Пример
&&иистинны оба условияage >= 7 && age <= 17
||илиистинно хотя бы одно условиеday === "сб" || day === "вс"
!неусловие ложно!(n === 0)

Таблица истинности

aba && ba || b
truetruetruetrue
truefalsefalsetrue
falsetruefalsetrue
falsefalsefalsefalse

Проверка диапазона

let x = Number(prompt("Число от 1 до 10?"));

if (x >= 1 && x <= 10) {
  alert("Подходит");
} else {
  alert("Вне диапазона");
}
Ловушка: запись 1 <= x <= 10, как в математике, в JavaScript работает неверно. Каждое сравнение записывают полностью и соединяют через &&.

Цепочки и логика · 4 минуты

Отмена prompt и ложные значения

Если нажать «Отмена», prompt возвращает null, а если нажать «ОК» с пустым полем — пустую строку "". Эти случаи проверяют до всех остальных:

let name = prompt("Как вас зовут?");

if (name === null) {
  alert("Вы нажали «Отмена»");
} else if (name === "") {
  alert("Имя не введено");
} else {
  alert("Привет, " + name + "!");
}
Зачем проверять сначала: Number(null) и Number("") равны 0. Если сразу превратить ответ в число, отмену нельзя будет отличить от введённого нуля.

Ложные значения

В условии можно написать не только сравнение. Тогда JavaScript превращает значение в логическое. Ложными считаются шесть значений: false, 0, "", null, undefined и NaN. Все остальные значения истинны.

Проверьте сами: нажмите «ОК», «Отмена» или оставьте поле пустым.

Тренажёр · уровень 1 из 3

Соедините условие и его смысл

Переменные x и age — числа, answer — результат prompt. Выберите условие слева, затем фразу справа, которая описывает, когда оно истинно.

Тренажёр · уровень 2 из 3

Соберите программу «Оценка по баллам»

Программа должна работать так: меньше 0 или больше 100 — «Такого результата не бывает»; от 85 — «Отлично»; от 65 — «Хорошо»; всё остальное — «Нужно повторить». Заполните четыре пропуска карточками. Две карточки лишние.

let score = Number(prompt("Сколько баллов (от 0 до 100)?"));
if (score < 0 score > 100) {
alert("Такого результата не бывает");
} (score 85) {
alert("Отлично");
} else if (score >= 65) {
alert("Хорошо");
} {
alert("Нужно повторить");
}

Тренажёр · уровень 3 из 3

Допишите условия

Скобки, кавычки и числа уже стоят в коде. В каждое поле введите только один оператор или одно слово, как описано в списке под кодом.

let day = prompt("День недели (пн, вт, …, вс)?");
if (day === "сб" day === "вс") {
  alert("Выходной");
}
let age = Number(prompt("Возраст?"));
if (age >= 7 age <= 17) {
  alert("Школьный возраст");
}
let name = prompt("Имя?");
if (name ) {
  alert("Вы нажали «Отмена»");
}
  1. Логический оператор «или»: выходной, если день — суббота или воскресенье.
  2. Логический оператор «и»: возраст от 7 и до 17 включительно.
  3. Оператор строгого равенства.
  4. Значение, которое возвращает prompt, если нажать «Отмена».

Самостоятельная работа · 12 минут

Игра «Угадай число»

Откройте тот же index.html. Старые команды внутри <script> закомментируйте знаками // или удалите. Новый код пишите внутри <script> сверху вниз, в том порядке, в каком идут шаги.

Цель: программа загадывает число от 1 до 10, спрашивает догадку и одним окном alert отвечает: «Угадали!», «Загаданное число больше», «Загаданное число меньше», «Нужно число от 1 до 10» или «Игра отменена».
1Загадайте число и спросите догадку

Загаданное число не меняется, поэтому объявите его через const. Ответ prompt пока не превращайте в число: сначала нужно проверить отмену.

const secret = 7;
let answer = prompt("Угадайте число от 1 до 10:");
let guess = Number(answer);
2Напишите цепочку условий

Под этими строками напишите одну цепочку if … else if … else. Порядок веток важен: первой проверяется отмена, потому что Number(null) равно 0.

if (answer === null) {
  alert("Игра отменена");
} else if (/* guess строго равно secret */) {
  // alert «Угадали!»
} else if (/* guess меньше secret */) {
  // alert «Загаданное число больше»
} else {
  // alert «Загаданное число меньше»
}
3Добавьте проверку диапазона

Вставьте новую ветку else if сразу после ветки отмены, перед проверкой guess === secret. Условие: guess меньше 1 или больше 10. Используйте оператор ||, а в блоке покажите alert("Нужно число от 1 до 10").

4Проверьте все ветки

Обновляйте страницу и вводите значения из таблицы. Каждый раз должно появиться ровно одно окно с указанным текстом.

ДействиеОжидаемое окно
«Отмена»Игра отменена
15Нужно число от 1 до 10
7Угадали!
3Загаданное число больше
9Загаданное число меньше
5Загадайте случайное число

Замените 7 в объявлении secret на выражение со страницы «Старт» первого занятия, изменив 6 на 10. Чтобы проверить игру, временно выведите secret в консоль:

const secret = Math.floor(Math.random() * 10) + 1;
console.log(secret);

Обновите страницу несколько раз: число в консоли должно меняться, а ответы — соответствовать ему.

★Дополнительно: ввод букв

Введите abc. Программа ответит «Загаданное число меньше», потому что guess равно NaN, а любое сравнение с NaN ложно. Добавьте после ветки отмены ветку else if (Number.isNaN(guess)) с сообщением «Это не число». Объясните в комментарии, почему ответ без этой ветки был «меньше».

Финал · 4 минуты

Что вы узнали на втором занятии

Сегодня получилось: сравнивать значения, выбирать ветку программы с помощью if, else и else if, объединять условия и обрабатывать отмену ввода.
Запомните: сравниваем через ===, а не =; в цепочке выполняется первая истинная ветка; && — «и», || — «или»; отмену prompt проверяем до Number.
Вопрос для самопроверки: что выведет console.log(5 === "5"); и почему?

Результаты работы с конспектом

0/6
тренажёров выполнено
0/6
шагов практики 1
0/5
шагов практики 2