← Назад к вопросам

Что выдаст false при преобразовании bool значения в JS?

1.0 Junior🔥 151 комментариев
#JavaScript Core

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

False значения в JavaScript при преобразовании к Boolean

В JavaScript при явном (с помощью Boolean() или двойного НЕ !!) или неявном преобразовании (в условиях if, циклах while, логических операторах &&, ||) существует строго определённый список значений, которые преобразуются в false. Все остальные значения преобразуются в true. Этот список называется "falsy values" (ложные значения).

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

  • false — очевидно, само булевое значение false.
  • 0 — число нуль (включая 0.0, -0).
  • "" — пустая строка (двойные кавычки). Примечание: строка с пробелом " " — это true.
  • '' — пустая строка (одинарные кавычки).
  • `` — пустая строка (шаблонная строка).
  • null — специальное значение, обозначающее "ничего", "пусто" или "неизвестное значение".
  • undefined — значение, присвоенное неинициализированным переменным, или результат обращения к несуществующему свойству объекта.
  • NaN (Not-a-Number) — специальное числовое значение, обозначающее результат некорректной математической операции (например, 0 / 0).

Примеры преобразования и проверки

Все эти значения при преобразовании дадут false.

// Явное преобразование с помощью Boolean()
console.log(Boolean(false));    // false
console.log(Boolean(0));        // false
console.log(Boolean(-0));       // false
console.log(Boolean(""));       // false
console.log(Boolean(null));     // false
console.log(Boolean(undefined)); // false
console.log(Boolean(NaN));      // false

// Неявное преобразование в условии if
if (0) {
    console.log("Это не выполнится");
} else {
    console.log("0 является falsy"); // Выполнится это
}

// Использование двойного НЕ для проверки
console.log(!!""); // false
console.log(!!undefined); // false

Важные особенности и распространённые ошибки

  1. Пустой объект {} и пустой массив [] — это true. Это часто вызывает путаницу.

    console.log(Boolean([])); // true
    console.log(Boolean({})); // true
    if ([]) {
        console.log("Пустой массив — truthy!"); // Выполнится
    }
    
  2. Строка "0" или "false" — это true. Преобразование происходит по содержимому строки, а не по её возможному смыслу.

    console.log(Boolean("0")); // true
    console.log(Boolean("false")); // true
    
  3. Числа -1, 42, Infinity, -Infinity — это true. Ложным является только 0-0).

    console.log(Boolean(-1)); // true
    console.log(Boolean(Infinity)); // true
    
  4. Значение document.all в браузерном JavaScript — исторический falsy. Это специфическое исключение, связанное с legacy кодом, и единственный объект, который является falsy. В современных стандартах его поведение описано как "willful violation" (умышленное нарушение).

    // В консоли браузера:
    console.log(Boolean(document.all)); // false (в большинстве браузеров)
    

Практическое применение знания falsy значений

  • Упрощение условий: вместо if (arr !== null && arr !== undefined && arr.length > 0) можно написать if (arr && arr.length) (но осторожно с arr=[] — он truthy).
  • Задание дефолтных значений: популярный паттерн использования ||.
    function greet(name) {
        // Если name falsy (undefined, "", null), используем "Гость"
        const displayName = name || "Гость";
        console.log(`Привет, ${displayName}!`);
    }
    greet(""); // Привет, Гость!
    
    Однако, этот паттерн не отличит `""` от `undefined`. В современных JS лучше использовать **оператор нулевого слияния (`??`)**.
```javascript
const displayName = name ?? "Гость"; // Сработает только для null/undefined
```
  • Проверка существования переменной или свойства: if (someVar) — проверка, что someVar не undefined, не null, не 0, не пустая строка и не NaN. Для строгой проверки на null/undefined используйте if (someVar != null) или if (someVar !== undefined && someVar !== null).

Итог: Для безопасного и точного контроля логики программы важно помнить весь список из восьми falsy значений (false, 0, "", null, undefined, NaN, '', ``) и понимать, что все объекты (включая пустые массивы и объекты), любые непустые строки и любые числа кроме нуля — являются truthy.