Урок 2 из 8 · 20 мин · обновлено
Операторы и условия
Арифметика и её ловушки, строгое сравнение ===, логические операторы и условные конструкции if, else if и else.
Арифметика
Основные операторы работают как в математике:
console.log(7 + 2); // 9
console.log(7 - 2); // 5
console.log(7 * 2); // 14
console.log(7 / 2); // 3.5
console.log(7 % 2); // 1 — остаток от деления
console.log(2 ** 3); // 8 — возведение в степень
Остаток % пригождается часто: например, число чётное, если n % 2 === 0.
Ловушка с плюсом
У оператора + двойная роль: он складывает числа и склеивает строки. Если хотя бы одна сторона — строка, JavaScript склеивает:
console.log(2 + 3); // 5
console.log("2" + 3); // "23"
console.log("2" * 3); // 6 — умножение превращает строку в число
Такое автоматическое превращение типов — частый источник ошибок. Например, значение из поля формы всегда приходит строкой. Чтобы посчитать с ним, превратите его в число явно:
const input = "25";
console.log(Number(input) + 5); // 30
Если превратить не получилось, будет NaN — «не число»: Number("abc") даст NaN.
Сравнение: === вместо ==
Сравнение возвращает true или false:
| Оператор | Значение |
|---|---|
=== |
строго равно |
!== |
строго не равно |
>, <, >=, <= |
больше, меньше и так далее |
В JavaScript есть два вида равенства. Нестрогое == перед сравнением превращает типы, и это даёт странные результаты:
console.log(5 == "5"); // true
console.log(0 == ""); // true
console.log(5 === "5"); // false
Поэтому правило простое: всегда используйте === и !==. Они сравнивают и значение, и тип.
Логические операторы
&&(и) — верны оба условия;||(или) — верно хотя бы одно;!(не) — переворачивает значение.
const age = 30;
const hasTicket = true;
console.log(age >= 18 && hasTicket); // true
console.log(!hasTicket); // false
Условия: if, else if, else
const temperature = 12;
if (temperature >= 20) {
console.log("Можно идти в футболке");
} else if (temperature >= 10) {
console.log("Возьмите куртку");
} else {
console.log("Нужна тёплая одежда");
}
Условие пишут в круглых скобках, а блок кода — в фигурных. JavaScript проверяет условия сверху вниз и выполняет первый подходящий блок.
Для коротких выборов есть тернарный оператор — условие в одну строку:
const status = age >= 18 ? "взрослый" : "ребёнок";
Что считается ложью
В условие можно подставить не только true или false. Эти значения считаются ложью: 0, пустая строка "", null, undefined, NaN. Всё остальное — истина. Это удобно для коротких проверок:
const userName = "";
if (!userName) {
console.log("Введите имя");
}
Попробуйте сами. Напишите код для кинотеатра: по возрасту age выведите цену билета. До 7 лет — бесплатно, от 7 до 17 — 250 ₽, от 18 — 400 ₽. Проверьте разные значения.
Решение
const age = 15;
if (age < 7) {
console.log("Бесплатно");
} else if (age < 18) {
console.log("Билет стоит 250 ₽");
} else {
console.log("Билет стоит 400 ₽");
}
Во втором условии не нужно писать age >= 7 && age < 18: если программа дошла до else if, значит возраст уже точно не меньше 7.
Мини-тест: проверьте себя
Закрепите урок: несколько вопросов, разбор ответов — в конце.
-
Что вернёт выражение "2" + 3?
Если один из операндов — строка, плюс склеивает строки. Остальные арифметические операторы, наоборот, пытаются превратить строку в число.
-
Чему равно 5 === "5"?
Строгое сравнение проверяет и значение, и тип. Число и строка — разные типы, поэтому false. Нестрогое == вернуло бы true, и из-за таких сюрпризов его избегают.
-
При каком значении age условие age >= 18 && age < 65 будет верным?
&& требует, чтобы были верны оба условия. Подходит только 30: оно не меньше 18 и меньше 65.
-
Что выведет код: const items = 0; if (items) { console.log('Есть товары'); } else { console.log('Корзина пуста'); }?
Ноль в условии считается ложью, поэтому выполнится блок else.