Условия
if / else
if (age >= 18) {
console.log('Взрослый');
} else {
console.log('Ребёнок');
}
else if
if (score >= 90) {
grade = 'A';
} else if (score >= 80) {
grade = 'B';
} else if (score >= 70) {
grade = 'C';
} else {
grade = 'F';
}
Тернарный оператор
const status = isActive ? 'активен' : 'неактивен';
Для простых условий:
const greeting = name ? `Привет, ${name}` : 'Привет';
switch
switch (day) {
case 'monday':
case 'tuesday':
console.log('Работа');
break;
case 'saturday':
case 'sunday':
console.log('Отдых');
break;
default:
console.log('Неизвестно');
}
Важно: без break выполнение «проваливается» в следующий case.
switch (1) {
case 1: console.log('один');
case 2: console.log('два');
default: console.log('default');
}
// один
// два
// default
Иногда это нужно (группировка случаев), но чаще — баг.
switch с true
Позволяет писать условия как в if:
switch (true) {
case score >= 90:
grade = 'A';
break;
case score >= 80:
grade = 'B';
break;
default:
grade = 'F';
}
Но обычно if/else понятнее.
Истинность
Условие приводится к boolean:
if (0) {} // не выполнится
if ('') {} // не выполнится
if ([]) {} // выполнится
if ({}) {} // выполнится
if ('false') {} // выполнится
Falsy: false, 0, -0, '', null, undefined, NaN.
Проверка на существование
if (value) {
// value truthy: не 0, не '', не null, не undefined
}
if (value !== null && value !== undefined) {
// только на null и undefined
}
if (value != null) {
// короче, но включает 0 и ''
}
Опциональная цепочка
if (user?.address?.city) {
console.log(user.address.city);
}
Логические операторы
&& для проверки
if (user && user.isAdmin) {
//
}
// Короче через ?.
if (user?.isAdmin) {
//
}
|| для значений по умолчанию
const name = input || 'Гость';
?? для значений по умолчанию
const count = input ?? 0; // 0 и '' не перезаписываются
Объект-маппинг вместо switch
const messages = {
success: 'Готово',
error: 'Ошибка',
loading: 'Загрузка',
};
console.log(messages[status] ?? 'Неизвестно');
Читается лучше длинного switch.
Итоги
if/else— база- Тернарник — для простых случаев
switch— для множества вариантов- Falsy-значения важны
??для значений по умолчанию- Объект-маппинг вместо
switch