Avatar ·

Как в JavaScript проверить переменную на null, undefined или пустое значение?

Привет! Я новичок в JavaScript и часто сталкиваюсь с проблемой проверки переменных на «пустоту». В разных местах мне нужно убедиться, что переменная не равна null, undefined или пустой строке (""), прежде чем использовать её в коде. Я пробовал писать такие проверки: ```javascript if (value !== null && value !== undefined && value !== "") { // делаем что-то } ``` Но это выглядит громоздко, особенно когда таких проверок много. Плюс я не уверен, что учёл все случаи — например, что будет с числом 0, с false или с пустым массивом? Должны ли они считаться «пустыми»? Я слышал, что в JavaScript есть какие-то хитрости с приведением типов, например, `if (value)` или `if (!value)`. Но это работает не всегда: `if (0)` возвращает false, хотя ноль — это вполне валидное значение. А `if ("")` тоже false. Подскажите, есть ли в JavaScript стандартная функция или универсальный способ проверить, что переменная «пустая» (null, undefined, пустая строка)? Или нужно каждый раз писать свою проверку? Может быть, есть популярные библиотеки, которые это умеют? Заранее спасибо за помощь! <<>>

Проблема «пустых» значений в JavaScript

В JavaScript нет единой встроенной функции, которая бы проверяла сразу на null, undefined и пустую строку, потому что понятие «пустота» зависит от контекста. Однако есть несколько надёжных подходов, которые помогут вам писать чистый и предсказуемый код.

1. Явная проверка (самый надёжный способ)

Если вам нужно проверить именно на null, undefined и пустую строку, лучше всего использовать явное сравнение:

function isEmpty(value) {
    return value === null || value === undefined || value === "";
}

// Использование
if (!isEmpty(someVariable)) {
    // переменная не null, не undefined и не пустая строка
}

Этот метод явно проверяет только три случая. Он не считает «пустыми» 0, false или пустой массив, что часто бывает важно.

2. Использование оператора ?? (nullish coalescing)

Оператор ?? (двойной вопросительный знак) проверяет только на null и undefined, игнорируя пустую строку и другие falsy-значения:

const value = someVariable ?? "значение по умолчанию";
// Если someVariable === null или undefined, подставится "значение по умолчанию"
// Если someVariable === "", 0 или false — останется исходное значение

3. Проверка на falsy-значения (осторожно!)

Конструкция if (value) проверяет все falsy-значения: false, 0, "", null, undefined, NaN. Это может быть удобно, но часто приводит к ошибкам:

let count = 0;
if (count) {
    console.log("Есть значение"); // НЕ выполнится, хотя 0 — валидное число
}

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

4. Проверка на «пустой» объект или массив

Если нужно проверить, что объект не пустой (не имеет ключей) или массив не пустой:

// Для массивов
if (Array.isArray(arr) && arr.length > 0) { ... }

// Для объектов
if (Object.keys(obj).length > 0) { ... }

5. Универсальная функция (кастомная)

Вы можете создать свою функцию, которая объединяет все нужные проверки:

function isBlank(value) {
    return (
        value === null ||
        value === undefined ||
        (typeof value === "string" && value.trim() === "") || // пустая строка или только пробелы
        (Array.isArray(value) && value.length === 0) ||       // пустой массив
        (typeof value === "object" && Object.keys(value).length === 0) // пустой объект
    );
}

Что выбрать?

  • Для строгой проверки на null/undefined/пустую строку — используйте явное сравнение или функцию isEmpty.
  • Для подстановки значений по умолчанию — ?? (nullish coalescing).
  • Для проверки, что значение «существует» — if (value !== null && value !== undefined).
  • Избегайте if (value) без понимания, какие значения могут быть falsy.

Главное правило JavaScript: всегда думайте о том, какие именно «пустые» значения вы хотите отсеять в конкретном сценарии. Универсального ответа нет, но теперь у вас есть инструменты для любого случая.

<<>>

Использование библиотечных утилит

Если вы работаете над большим проектом и не хотите писать свои проверки, можно использовать готовые функции из популярных библиотек:

Lodash

Библиотека lodash предоставляет несколько полезных функций:

import _ from 'lodash';

_.isNil(value);    // true для null и undefined
_.isEmpty(value);  // true для null, undefined, "", [], {} (но не для числа 0 или false)
_.isNull(value);   // true только для null
_.isUndefined(value); // true только для undefined

Особенно полезна _.isEmpty(), которая проверяет сразу несколько типов «пустоты».

Ramda

Функциональная библиотека Ramda также имеет удобные проверки:

import R from 'ramda';

R.isNil(value);    // null или undefined
R.isEmpty(value);  // пустая строка, массив или объект

Совет по TypeScript

Если вы используете TypeScript, можно строго типизировать переменные и избежать многих проверок на null/undefined на уровне компиляции:

function greet(name: string | null) {
    if (name === null) {
        console.log("Привет, гость!");
    } else {
        console.log(`Привет, ${name}!`);
    }
}

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