Boolean
Boolean — логический тип данных с двумя значениями:
trueиfalse.
Зачем нужно
Boolean управляет потоком программы: условия, циклы, фильтрация данных. Понимание truthy/falsy значений критично для написания корректных условий.
Где используется
- Условные конструкции (
if, тернарный оператор) - Циклы (
while,do-while) - Фильтрация массивов
- Переключатели и флаги
- Валидация данных
Предпосылки
Создание boolean
const isActive = true;
const isDeleted = false;
// Функция Boolean
Boolean(1); // true
Boolean(0); // false
Boolean('hello'); // true
Boolean(''); // false
// Двойное отрицание (краткий способ)
!!1; // true
!!'hello'; // true
!!0; // false
!!''; // false
Truthy и Falsy значения
Falsy (ложные) — всего 8 значений
Boolean(false); // false
Boolean(0); // false
Boolean(-0); // false
Boolean(0n); // false (BigInt)
Boolean(''); // false (пустая строка)
Boolean(null); // false
Boolean(undefined); // false
Boolean(NaN); // false
Truthy (истинные) — всё остальное
Boolean(true); // true
Boolean(42); // true
Boolean(-1); // true
Boolean('0'); // true — непустая строка!
Boolean('false'); // true — непустая строка!
Boolean(); // true — пустой массив!
Boolean({}); // true — пустой объект!
Boolean(function{}); // true
Boolean(Infinity); // true
Boolean(new Date); // true
Важно запомнить: '0', 'false', ``, {} — все truthy!
Логические операторы
&& (И) — возвращает первый falsy или последний truthy
// Классическое использование
true && true; // true
true && false; // false
false && true; // false
// Возвращает значение, не boolean!
'hello' && 42; // 42 (оба truthy — вернул последний)
'' && 42; // '' (первый falsy)
null && 'hello'; // null
'a' && 'b' && 'c'; // 'c'
'a' && '' && 'c'; // ''
// Практическое применение — условное выполнение
const user = { name: 'Алиса' };
user && console.log(user.name); // 'Алиса'
const noUser = null;
noUser && console.log(noUser.name); // null (ошибки нет)
|| (ИЛИ) — возвращает первый truthy или последний falsy
true || false; // true
false || true; // true
false || false; // false
// Возвращает значение
'hello' || 'default'; // 'hello'
'' || 'default'; // 'default'
null || 'default'; // 'default'
0 || 42; // 42
// Практическое применение — значения по умолчанию
const port = config.port || 3000;
const name = userName || 'Гость';
// ПРОБЛЕМА: 0 и '' считаются falsy
const count = userCount || 10;
// Если userCount = 0, получим 10 (неправильно!)
?? (Nullish Coalescing) — только null и undefined
// Возвращает правый операнд только если левый null или undefined
null ?? 'default'; // 'default'
undefined ?? 'default'; // 'default'
0 ?? 'default'; // 0 (не null/undefined)
'' ?? 'default'; // '' (не null/undefined)
false ?? 'default'; // false
// Правильные значения по умолчанию
const count = userCount ?? 10; // 0 сохранится!
! (НЕ) — инвертирует
!true; // false
!false; // true
!0; // true
!'hello'; // false
!null; // true
// Двойное отрицание — преобразование в boolean
!!42; // true
!!''; // false
!!null; // false
Сравнения и boolean
// Операторы сравнения возвращают boolean
5 > 3; // true
5 < 3; // false
5 >= 5; // true
5 <= 4; // false
// Строгое равенство (рекомендуется)
5 === 5; // true
5 === '5'; // false (разные типы)
// Нестрогое равенство (избегай)
5 == '5'; // true (приведение типов)
null == undefined; // true
0 == ''; // true
0 == false; // true
Условия с boolean
// if проверяет truthiness, не строго true
const name = 'Алиса';
if (name) {
console.log(`Привет, ${name}`); // Выполнится
}
const empty = '';
if (empty) {
console.log('Не выполнится');
}
// Тернарный оператор
const status = isActive ? 'Активен' : 'Неактивен';
// Фильтрация с boolean
const items = [0, 1, '', 'hello', null, true, undefined];
const truthyItems = items.filter(Boolean);
// [1, 'hello', true]
Частые ошибки
1. Пустой массив truthy
const arr = ;
if (arr) {
console.log('Выполнится!'); // — truthy
}
// Правильная проверка пустоты массива
if (arr.length) {
console.log('Массив не пуст');
}
2. Сравнение с true/false напрямую
// Плохо
if (isActive === true) { /* ... */ }
if (arr.length > 0 === true) { /* ... */ }
// Хорошо
if (isActive) { /* ... */ }
if (arr.length) { /* ... */ }
3. || для значений по умолчанию при 0 или ''
function greet(name) {
// Если name = '', это тоже валидное значение?
const displayName = name || 'Гость'; // '' заменится на 'Гость'
const safeName = name ?? 'Гость'; // '' сохранится
}
Практика
- Напиши функцию
isEmptyObject(obj)—trueесли объект пустой - Очисти массив от falsy-значений с помощью
.filter(Boolean) - Напиши функцию с дефолтными параметрами, используя
?? - Покажи разницу между
||и??для значений0,'',null
Связанные темы
Ресурсы
⚡ Источник: Logical Expression в javascript · AsForJS
- 📅 2023-05-10 · YouTube
- Тезисы:
- В спеке есть abstract operation
ToBoolean(x). Falsy values:undefined,null,false,+0,-0,NaN,"". Всё остальное — truthy - Логические операторы НЕ возвращают boolean — возвращают operand.
0 || 'fallback'вернёт'fallback'(string) Boolean(x)явное преобразование =!!x=ToBoolean(x)
- В спеке есть abstract operation