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

Какие ложные значения существуют в JS?

1.0 Junior🔥 181 комментариев
#Другое

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

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

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

Ложные (Falsy) значения в JavaScript

В JavaScript ложными (falsy) называются значения, которые при приведении к логическому типу (boolean) преобразуются в false. Это фундаментальное поведение языка, критически важное для условных конструкций (if, while, &&, ||, ??), тернарного оператора и многих других операций. Знание всех falsy значений — обязательная база для предотвращения ошибок в логике программы, особенно в тестировании и автоматизации, где часто требуется валидация данных и состояний.

Список всех шести falsy значений

JavaScript строго определяет шесть falsy значений:

  1. false — ключевое слово, представляющее логическую ложь.
  2. 0 — числовой ноль (включая 0.0, 0x0).
  3. "" или '' — пустая строка (строка нулевой длины). Важно: строка с пробелом (" ") — truthy.
  4. null — специальное значение, обозначающее «ничего», «пусто» или «значение неизвестно».
  5. undefined — значение переменной, которая была объявлена, но не инициализирована, или несуществующего свойства объекта.
  6. NaN (Not-a-Number) — результат некорректной математической операции (например, 0 / 0).

Все остальные значения в JavaScript являются истинными (truthy). Это включает в себя:

  • Пустые объекты ({}), массивы ([]), функции (function(){})
  • Строки, включая строку "false"
  • Любые числа, кроме 0 и -0 (включая отрицательные, Infinity)
  • Специальный объект document.all в браузерах (историческое исключение).

Примеры и демонстрация в коде

Рассмотрим поведение каждого значения на практике:

// Функция для проверки, является ли значение falsy
function checkFalsy(value, name) {
    if (!value) {
        console.log(`${name} (${typeof value}) является FALSY.`);
    } else {
        console.log(`${name} (${typeof value}) является TRUTHY.`);
    }
}

// Проверка основных falsy значений
checkFalsy(false, 'false');        // falsy
checkFalsy(0, '0');                // falsy
checkFalsy(-0, '-0');              // falsy
checkFalsy("", 'пустая строка');   // falsy
checkFalsy(null, 'null');          // falsy
checkFalsy(undefined, 'undefined');// falsy
checkFalsy(NaN, 'NaN');            // falsy

// Примеры truthy значений для контраста
checkFalsy(" ", 'строка с пробелом'); // truthy
checkFalsy("0", 'строка "0"');        // truthy
checkFalsy([], 'пустой массив []');   // truthy
checkFalsy({}, 'пустой объект {}');   // truthy
checkFalsy(function(){}, 'функция');  // truthy
checkFalsy(-42, 'отрицательное число'); // truthy
checkFalsy(3.14, 'дробное число');    // truthy

Важные нюансы и подводные камни для QA Automation Engineer

Понимание этих нюансов предотвращает логические ошибки в автотестах:

  • Пустые массивы и объекты — truthy. Это частая ошибка новичков. Проверка if (user.permissions) вернет true даже для permissions: []. Для проверки на «пустоту» нужно использовать свойство .length для массивов или Object.keys(obj).length для объектов.

    let arr = [];
    if (arr) { console.log("Truthy!"); } // Сработает
    if (arr.length) { console.log("В массиве есть элементы"); } // Не сработает - корректная проверка
    
  • Строка "0" — truthy. В логических операциях она ведет себя как true, в числовых контекстах может превратиться в 0. Это может сломать логику, если ожидается число.

    let input = "0"; // Например, значение из поля формы
    if (input) { console.log("Поле заполнено"); } // Сработает, хотя пользователь ввел ноль!
    
  • NaN — единственное значение в JS, которое не равно самому себе. Для его проверки нельзя использовать операторы == или ===. Необходимо применять глобальную функцию isNaN() или, лучше, Number.isNaN() (ES6), которая не выполняет принудительное приведение типа.

    console.log(NaN === NaN); // false!
    console.log(isNaN(NaN)); // true
    console.log(Number.isNaN(NaN)); // true (более безопасный вариант)
    console.log(Number.isNaN("строка")); // false (в отличие от глобальной isNaN)
    
  • Различие между null и undefined. undefined обычно означает «значение не было присвоено», а null — «значение было явно установлено в пустоту». В строгом режиме (==) они равны друг другу, но не равны чему-либо еще. При использовании строгого равенства (===) — это разные значения.

    console.log(null == undefined); // true
    console.log(null === undefined); // false
    

Для автоматизатора тестирования это знание критически применимо при:

  • Валидации ответов API (проверка, что поле не null/undefined/пустое).
  • Написании условных шагов в тестах (например, «если элемент присутствует, кликнуть»).
  • Сравнении фактических и ожидаемых результатов с учетом типов данных.
  • Отладке скриптов, когда условие работает не так, как ожидалось, из-за неочевидного приведения типа.

Таким образом, четкое понимание шести falsy значений и их особенностей — это не просто теория, а практический инструмент для написания надежных, предсказуемых и корректных автотестов на JavaScript.

Какие ложные значения существуют в JS? | PrepBro