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 ?? 'Гость';    // '' сохранится
}

Практика

  1. Напиши функцию isEmptyObject(obj)true если объект пустой
  2. Очисти массив от falsy-значений с помощью .filter(Boolean)
  3. Напиши функцию с дефолтными параметрами, используя ??
  4. Покажи разницу между || и ?? для значений 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)