Что такое boolean — и почему строка «false» на самом деле true

Вот задачка. Пользователь в настройках выключил уведомления. Сервер прислал "notifications": "false". Код проверяет if (notifications) — и… шлёт уведомление.
Никакой магии. Слово "false" в кавычках — это не ложь. Это строка из пяти букв. А любая непустая строка для JavaScript — правда. Давай разберёмся, как устроены «да» и «нет» в коде и где они врут.
Что такое boolean
Boolean (по-русски «булево значение», в честь математика Джорджа Буля) — самый простой тип данных. У него всего два варианта: true (правда) и false (ложь). Как выключатель: свет или горит, или нет. Третьего не дано.
const isLoggedIn = true
const hasPaid = false
const isAdult = age >= 18 // сравнение само выдаёт true или false
Булевы значения получаются из вопросов. «Возраст больше 18?» — true или false. «Пароли совпали?» — то же. Любое сравнение (>, <, ===) отвечает именно так.
Имена у таких переменных обычно начинаются с is, has, can: isOpen, hasError, canEdit. Увидишь такое в коде от ИИ — почти наверняка внутри true или false.
Зачем программе «да» и «нет»
Почти каждое решение в приложении — это развилка. Показать кнопку «Выйти» или «Войти»? Пустить на страницу оплаты? Подсветить поле красным? За каждым таким выбором стоит одна проверка, которая сводится к true или false.
if (isLoggedIn) {
showProfile()
} else {
showLoginButton()
}
Булевы значения умеют складываться в сложные условия:
&&— «и»:isLoggedIn && hasPaid— правда, только если правда оба;||— «или»:isAdmin || isOwner— хватит одного;!— «не»:!isLoadingпереворачивает значение.
Вот и весь набор. Из этих трёх деталек собирается логика любого экрана.
Правдивые и ложные: где JavaScript хитрит
А теперь то, чего не пишут в определениях. Внутри if JavaScript готов проверить что угодно, не только true и false. Он молча переводит любое значение в «да» или «нет».
Ложью (по-английски falsy) считается короткий список:
false0""— пустая строкаnullиundefinedNaN
Всё остальное — правда (truthy). И вот тут начинаются сюрпризы:
Boolean("false") // true — непустая строка
Boolean("0") // true — тоже непустая строка
Boolean([]) // true — пустой массив!
Boolean({}) // true — пустой объект
Boolean(0) // false
Каждая строчка — реальный баг из жизни:
"false"из сервера или localStorage. Там всё хранится строками. Сохранилfalse— достал"false", и оно истинно.- Пустой массив.
if (items)пройдёт даже при[]. Экран «ничего не найдено» не покажется. Правильно —if (items.length > 0). - Ноль. Цена
0— бесплатный товар — внезапно считается «цены нет», и блок с ценой пропадает.
Как проверять правильно
Мысленная модель простая: спрашивай у кода ровно то, что имеешь в виду.
- Хочешь знать, есть ли элементы — спрашивай длину:
items.length > 0. - Хочешь знать, пришло ли значение, и ноль допустим — проверяй пустоту явно:
price !== null && price !== undefinedилиprice != null. - Флаг пришёл строкой — сравни со строкой:
value === "true". Или лучше попроси сервер присылать настоящийtrue.
А в промпте для ИИ помогает одна фраза: «флаги храни как boolean, а не строки; ноль — это допустимое значение». Модель перестанет писать ленивое if (price).
Если используешь TypeScript, он поймает часть таких историй ещё до запуска. Подробнее — в сравнении TypeScript и JavaScript.
Когда ты встретишь boolean
Буквально везде, где есть «вкл/выкл»:
- галочки и переключатели в формах — их значение
trueилиfalse; - состояние экрана:
isLoading,isOpen,hasError; - права доступа:
isAdmin,canEdit; - колонки в базе данных вроде
is_paidилиis_deleted.
Чем == отличается от === при проверке на true?
Двойное равно пытается привести типы и путается: [] == false даёт true. Тройное сравнивает честно, без превращений. Пиши === почти всегда.
Что такое «!!» в коде?
Двойное отрицание превращает любое значение в честный boolean. !!"текст" даёт true, !!0 даёт false. Это короткая запись Boolean(значение).
В Python так же?
Похоже, но пустой список там — ложь. if []: в Python не выполнится, а в JavaScript выполнится. Переносишь код между языками — проверь такие места первыми.
Короткие уроки-истории, симулятор агента и ежедневная практика — в нашем мобильном приложении. Бесплатно.





