Menu
Русский

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

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

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

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

index.js
Output
Click Run to see the output here.

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

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

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

index.js
Output
Click Run to see the output here.

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

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

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

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

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

index.js
Output
Click Run to see the output here.

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

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

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

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

index.js
Output
Click Run to see the output here.

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

index.js
Output
Click Run to see the output here.

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

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

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

index.js
Output
Click Run to see the output here.

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

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

index.js
Output
Click Run to see the output here.

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

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

index.js
Output
Click Run to see the output here.

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

index.js
Output
Click Run to see the output here.

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

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

index.js
Output
Click Run to see the output here.

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

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

Условные конструкции и циклы уже в кармане — значит, пора разобраться, как в 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

НАЧАТЬ