Menu

Truthy и Falsy в JavaScript: полный список

Разбираем, какие значения в JavaScript считаются truthy, а какие falsy, полный список falsy-значений и как работает приведение к boolean на практике.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

У каждого значения есть своё «булево настроение»

В JavaScript на месте булева значения можно подставить любое значение — внутри if, в условии while, рядом с && или ||. В этот момент значение приводится к true или false. Те, что превращаются в false, называют falsy (ложными), все остальные — truthy (истинными).

Никакой функции-конвертера, никакого явного каста — JavaScript делает всё сам. Правила зафиксированы и их немного, так что достаточно запомнить список falsy-значений — и всё остальное встаёт на свои места.

Полный список falsy-значений в JavaScript

Ровно семь значений считаются falsy. Всё остальное в языке — truthy.

Вот и весь список:

  • false — собственно сам булев false.
  • 0 и -0 — оба нуля.
  • 0n — BigInt-ноль.
  • "" — пустая строка (одинарные, двойные, обратные кавычки — без разницы).
  • null — значение «намеренно ничего».
  • undefined — значение «не задано».
  • NaN — результат некорректной математики вроде 0 / 0.

Запомните эти семь. И дальше, когда сомневаетесь насчёт любого значения, просто спрашивайте себя: «оно входит в эти семь?» Если нет — значит, truthy.

Подводные камни: "0", [] и {}

Вот тут новички чаще всего обжигаются. Куча значений выглядят пустыми, но на самом деле truthy:

Строка считается falsy только если в ней ноль символов. У "0" один символ — значит, это truthy. А вот массивы и объекты в JavaScript всегда truthy, даже пустые: движок воспринимает их как объекты, а любой объект — truthy, что бы в нём ни лежало (или не лежало).

Если ты пришёл из Python — это, пожалуй, самый непривычный момент. Там [] и {} — falsy. В JavaScript — нет.

Как правильно проверять массив или объект на пустоту

Раз [] и {} — это truthy, напрямую запихнуть их в if для проверки на пустоту не получится. Пиши явно:

То же самое со строками — если вы хотите считать строку из одних пробелов пустой:

Truthy и falsy — это удобная сокращённая запись, а не замена размышлениям о том, что именно «пусто» для ваших данных.

Приведение к boolean в JavaScript

Иногда нужно получить настоящее true или false, а не просто «truthy-подобное» значение. Для этого есть два приёма:

Boolean(x) — это явное приведение к boolean. !!x делает ровно то же самое, только короче: первый ! превращает значение в булево и инвертирует его, а второй ! возвращает исходный смысл. Оба варианта встречаются повсеместно. !! лаконичнее, а Boolean() читается понятнее.

Двойное отрицание !! часто попадается в return, когда функция должна вернуть честный boolean:

Truthy/Falsy в связке с && и ||

Логические операторы в JavaScript не возвращают true или false — они возвращают один из операндов. А какой именно — зависит от его «правдивости» (truthy/falsy):

Именно поэтому шаблон value || defaultValue так часто встречается для значений по умолчанию. Но тут есть ловушка: он одинаково относится ко всем falsy-значениям, включая 0 и "", а это зачастую вполне валидные входные данные:

Если нужно подставить значение по умолчанию только для null или undefined, берите оператор нулевого слияния ??. Про него есть отдельная статья.

Краткая шпаргалка

Распечатай, приклей к монитору и живи дальше.

Дальше: итераторы и генераторы

Условные конструкции и циклы уже в кармане — значит, пора разобраться, как в JavaScript значения умеют «выдаваться» по запросу. Итераторы и генераторы — это как раз та механика, которая стоит за for...of, оператором spread и кучей современных API. Про них и поговорим в следующей главе.

Часто задаваемые вопросы

Какие значения в JavaScript считаются falsy?

Их ровно семь: false, 0, -0, 0n (BigInt-ноль), '' (пустая строка), null, undefined и NaN. Всё остальное — truthy, включая '0', 'false', [] и {}. Запомните этот короткий список — и для любого другого значения ответ получите методом исключения.

Пустой массив в JavaScript — это truthy или falsy?

Truthy. Конструкция if ([]) { ... } спокойно войдёт в блок, и это частенько сбивает с толку тех, кто пришёл из Python или PHP. Массивы и объекты — это объекты, а любые объекты считаются truthy независимо от содержимого. Чтобы проверить, что массив пуст, пишите явно: arr.length === 0.

Как привести значение к boolean в JavaScript?

Есть два способа: Boolean(value) — явный вариант, и !!value — короткая запись (двойное отрицание: сначала приводит и инвертирует, потом инвертирует обратно). Оба работают по одним и тем же правилам truthy/falsy. Используйте их, когда нужен именно true или false, а не просто «что-то истинное».

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ