Что такое falsy-значения в JavaScript?

Ответ

В JavaScript falsy-значение — это значение, которое приводится к false в булевом контексте (например, в условии if, при использовании логического оператора ! или в тернарном операторе).

Список всех 6 falsy-значений:

  1. false — булево значение ложь.
  2. 0 — число ноль (также -0, 0n (BigInt)).
  3. "" — пустая строка (также '', ``).
  4. null — отсутствие какого-либо значения объекта.
  5. undefined — неопределенное значение.
  6. NaN (Not a Number) — результат некорректной математической операции.

Примеры проверки в условиях:

// Все эти условия НЕ выполнятся (блок if будет пропущен)
if (false) { /* ... */ }
if (0) { /* ... */ }
if ("") { /* ... */ }
if (null) { /* ... */ }
if (undefined) { /* ... */ }
if (NaN) { /* ... */ }

// Практическое использование для проверки на наличие значения
function greetUser(name) {
  // Если name - falsy (undefined, "", null), используется значение по умолчанию
  const userName = name || 'Гость';
  console.log(`Привет, ${userName}!`);
}
greetUser(); // Привет, Гость!
greetUser("Анна"); // Привет, Анна!

Важные нюансы:

  • Все остальные значения являются truthy. Это включает неочевидные, такие как:
    • "0" (строка с нулем), "false" (непустая строка)
    • [] (пустой массив), {} (пустой объект)
    • function() {} (пустая функция)
  • Явное сравнение (===) строже, чем приведение типа. if (0 === false) вернет false, так как типы разные.
  • Для безопасной проверки на null или undefined используйте оператор нулевого слияния (??). Он возвращает правый операнд, только если левый — null или undefined (но не другие falsy-значения).
    const count = 0;
    console.log(count || 10); // 10 (потому что 0 - falsy) - может быть ошибкой!
    console.log(count ?? 10); // 0 (корректно, так как count не null/undefined)

Ответ 18+ 🔞

А, вот эта тема про falsy-значения в JavaScript — это, блядь, классика, про которую каждый второй джуниор спотыкается, как обоссаный кот о порог!

Смотри, сука, в чём суть. Есть в языке такие значения, которые, когда ты их суёшь в условие, ведут себя как полная хуйня — то есть как false. Их, на наше счастье, всего шесть штук, запомнить можно. Сейчас я их, блядь, как на духу перечислю:

  1. false — ну это само собой, ложь, пизда.
  2. 0 — цифра ноль. И минус ноль, и большой ноль (0n) — тоже в эту же банду.
  3. "" — пустая строка. Вообще любая пустая кавычка, хоть одинарная, хоть обратные палки.
  4. null — это когда нихуя нет, вакуум, пустота, блядь.
  5. undefined — а это когда даже нихуя не определили, ваще пиздец.
  6. NaN — результат, когда ты пытаешься сложить помидор с айфоном. Не число, короче.

Вот если любое из этих шести чудес света засунуть в if, то внутри него ничего не выполнится, всё проёбано.

// Все эти if'ы — просто пшик, они нихуя не сделают
if (false) { /* ... */ }
if (0) { /* ... */ }
if ("") { /* ... */ }
if (null) { /* ... */ }
if (undefined) { /* ... */ }
if (NaN) { /* ... */ }

// А на практике это часто юзают, чтобы подставить дефолтное значение
function greetUser(name) {
  // Если name — falsy (undefined, "", null), то подставляется 'Гость'
  const userName = name || 'Гость';
  console.log(`Привет, ${userName}!`);
}
greetUser(); // Привет, Гость!
greetUser("Анна"); // Привет, Анна!

А теперь, внимание, ебаный рот этого казино! Всё остальное — это truthy, то есть считается за true. И тут начинается цирк, потому что в эту правдивую компанию попадают такие, блядь, странные типы:

  • "0" — строка с нулём внутри. Не пустая же, сука!
  • "false" — просто слово из пяти букв, нихуя не ложь.
  • [] — пустой массив. Да, он truthy, в рот меня чих-пых!
  • {} — пустой объект. Тоже truthy, ёпта!
  • function() {} — пустая функция. И она truthy!

Вот поэтому, чувак, если ты хочешь проверять именно на null или undefined, а не на все falsy подряд, то забей на старый добрый ||. Бери оператор нулевого слияния (??). Он умнее, он сработает только если слева реально null или undefined, а на ноль или пустую строку — похуй.

const count = 0;
console.log(count || 10); // 10 (потому что 0 - falsy) — вот тут и вылезает ошибка, если ты хотел именно ноль!
console.log(count ?? 10); // 0 (вот так правильно, потому что count не null и не undefined)

Вот и вся магия, блядь. Запомни эти шесть грешников, а на остальное — забивай болт, оно truthy.