Truthy и falsy значения в JavaScript

В JavaScript любое значение можно проверить как true или false. Это важно для условий if, логических операторов и коротких проверок в коде.

let userName = 'Алексей';

if (userName) {
  console.log('Имя указано');
}

Переменная userName содержит непустую строку. Для условия это значение считается истинным, поэтому код внутри if выполнится.

Что такое truthy и falsy

Truthy - это значения, которые при проверке ведут себя как true.

Falsy - это значения, которые при проверке ведут себя как false.

Это не значит, что значение буквально равно true или false. Например, строка ‘Привет’ - это строка, но в условии она считается истинной.

if ('Привет') {
  console.log('Условие выполнится');
}

Falsy значения

В обычном коде чаще всего нужно помнить вот эти falsy значения:

  • false
  • 0
  • -0
  • 0n
  • - пустая строка
  • null
  • undefined
  • NaN
if (0) {
  console.log('Этот код не выполнится');
}

if ('') {
  console.log('Этот код тоже не выполнится');
}

Оба условия считаются ложными, поэтому сообщения не появятся в консоли.

Truthy значения

Все остальные обычные значения считаются truthy. Например:

  • непустые строки;
  • числа, кроме 0 и -0;
  • объекты;
  • массивы;
  • функции.
if ('0') {
  console.log('Строка с нулем - truthy');
}

if ([]) {
  console.log('Пустой массив - truthy');
}

if ({}) {
  console.log('Пустой объект - truthy');
}

Здесь все три условия выполнятся. Строка ‘0’ не является числом 0, а массивы и объекты считаются истинными, даже если внутри них нет данных.

Проверка через Boolean()

Чтобы явно посмотреть, как значение будет вести себя в условии, можно использовать Boolean().

console.log(Boolean(0));
console.log(Boolean(''));
console.log(Boolean('JavaScript'));
console.log(Boolean([]));

Результат:

false
false
true
true

Boolean() не меняет исходное значение. Он только возвращает true или false для проверки.

Truthy и falsy в условиях

Чаще всего truthy и falsy значения встречаются в if.

let message = '';

if (message) {
  console.log('Сообщение есть');
} else {
  console.log('Сообщение пустое');
}

Пустая строка - falsy значение, поэтому выполнится блок else.

Такую проверку удобно использовать, когда нужно понять, заполнено ли значение:

let userName = 'Анна';

if (userName) {
  console.log('Привет, ' + userName);
}

Когда лучше проверять явно

Короткая проверка через truthy и falsy удобна, но не всегда подходит. Если 0 является нормальным значением, лучше сравнить явно.

let count = 0;

if (count) {
  console.log('Товары есть');
} else {
  console.log('Товаров нет');
}

Здесь все нормально, если 0 действительно означает отсутствие товаров.

Но если нужно проверить, что значение вообще было передано, такая запись может быть неточной:

let count = 0;

if (count !== undefined) {
  console.log('Значение передано');
}

В этом примере 0 не теряется, потому что мы проверяем именно undefined, а не истинность значения.

Итого

Truthy и falsy помогают понять, как JavaScript проверяет значения в условиях. false, 0, пустая строка, null, undefined и NaN ведут себя как false. Большинство остальных значений ведут себя как true. Если значение может быть 0 или пустой строкой, подумайте, подходит ли короткая проверка, или лучше сравнить явно.