Ответ
В JavaScript falsy-значение — это значение, которое приводится к false в булевом контексте (например, в условии if, при использовании логического оператора ! или в тернарном операторе).
Список всех 6 falsy-значений:
false— булево значение ложь.0— число ноль (также-0,0n(BigInt)).""— пустая строка (также'',``).null— отсутствие какого-либо значения объекта.undefined— неопределенное значение.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. Их, на наше счастье, всего шесть штук, запомнить можно. Сейчас я их, блядь, как на духу перечислю:
false— ну это само собой, ложь, пизда.0— цифра ноль. И минус ноль, и большой ноль (0n) — тоже в эту же банду.""— пустая строка. Вообще любая пустая кавычка, хоть одинарная, хоть обратные палки.null— это когда нихуя нет, вакуум, пустота, блядь.undefined— а это когда даже нихуя не определили, ваще пиздец.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.