Avatar ·

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

Всем привет! Я только начал изучать JavaScript и столкнулся с проблемой проверки переменных на "пустоту". У меня есть функция, которая принимает строку от пользователя. Иногда пользователь ничего не вводит, иногда приходит null из API, а бывает, что переменная вообще не определена. Мне нужно написать универсальную проверку, которая отловит все эти случаи. Я пробовал писать так: ```javascript function validateInput(value) { if (value == null) { return "Значение отсутствует"; } // ... дальше работаем с value } ``` Но это не ловит пустые строки. Потом я попробовал: ```javascript if (value === null || value === undefined || value === "") { ``` Но это выглядит ужасно громоздко, особенно когда таких проверок много. Ещё я слышал про `typeof`, но не понимаю, как его правильно применить. Подскажите, есть ли в JavaScript стандартная функция или короткий способ проверить, что переменная равна null, undefined или пустой строке? Может быть, есть какой-то общепринятый паттерн для таких проверок? Заранее спасибо! <<>>

Универсальная проверка на "пустоту" в JavaScript

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

1. Самый простой способ — использовать логическое отрицание

В JavaScript существует понятие "falsy" (ложных) значений. К ним относятся:

  • false
  • 0
  • "" (пустая строка)
  • null
  • undefined
  • NaN

Это значит, что вы можете написать очень короткую проверку:

function isEmpty(value) {
    return !value;
}

// Примеры использования:
console.log(isEmpty(null));      // true
console.log(isEmpty(undefined)); // true
console.log(isEmpty(""));        // true
console.log(isEmpty("Привет"));  // false
console.log(isEmpty(0));         // true (но это может быть нежелательно!)

Внимание: этот метод считает "пустыми" также 0 и false. Если вам нужно строго проверять только null, undefined и пустую строку, используйте второй способ.

2. Строгая проверка только на null, undefined и пустую строку

Если вы хотите игнорировать 0 и false, используйте такую функцию:

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

// Сокращенный вариант с Array.includes:
function isEmptyStrict(value) {
    return [null, undefined, ""].includes(value);
}

// Примеры:
console.log(isEmptyStrict(null));      // true
console.log(isEmptyStrict(undefined)); // true
console.log(isEmptyStrict(""));        // true
console.log(isEmptyStrict(0));         // false
console.log(isEmptyStrict(false));     // false

3. Проверка с учетом пробелов (trim)

Часто нужно считать "пустой" и строку, состоящую только из пробелов. Для этого используйте метод trim():

function isBlank(value) {
    if (value === null || value === undefined) return true;
    if (typeof value === 'string' && value.trim() === '') return true;
    return false;
}

// Или более короткая версия:
const isBlank = (value) => 
    value == null || (typeof value === 'string' && value.trim() === '');

console.log(isBlank("   "));   // true
console.log(isBlank(""));      // true
console.log(isBlank(null));    // true

4. Использование оператора нулевого слияния (??)

В современном JavaScript (ES2020+) вы можете использовать оператор ?? для работы с null и undefined:

// Возвращает значение по умолчанию, если value === null || value === undefined
const safeValue = value ?? "значение по умолчанию";

// Для пустых строк всё равно нужна дополнительная проверка
const finalValue = (value ?? "") === "" ? "по умолчанию" : value;

Рекомендация

Для вашей задачи я рекомендую создать небольшую утилитарную функцию и использовать её во всём проекте:

// utils.js
export function isBlank(value) {
    return value == null || (typeof value === 'string' && value.trim() === '');
}

// Использование:
function validateInput(value) {
    if (isBlank(value)) {
        return "Значение отсутствует или пусто";
    }
    return `Вы ввели: ${value}`;
}

Этот подход даёт вам гибкость: если позже понадобится изменить логику проверки, вы сделаете это в одном месте.

<<>>

Альтернативный подход: использование сторонних библиотек

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

Lodash

Библиотека lodash предоставляет функцию _.isEmpty(), которая проверяет не только null, undefined и пустые строки, но и пустые объекты, массивы, Map и Set:

// Установка: npm install lodash
import _ from 'lodash';

console.log(_.isEmpty(null));      // true
console.log(_.isEmpty(undefined)); // true
console.log(_.isEmpty(""));        // true
console.log(_.isEmpty([]));        // true
console.log(_.isEmpty({}));        // true
console.log(_.isEmpty("Привет"));  // false

Ramda

Библиотека ramda предлагает похожую функциональность с фокусом на функциональное программирование:

import R from 'ramda';

console.log(R.isEmpty(null));      // true
console.log(R.isEmpty(""));        // true

Когда использовать библиотеки?

  • Если проект уже использует lodash/ramda — не изобретайте велосипед
  • Если нужно проверять не только примитивы, но и коллекции
  • Если вы пишете небольшой скрипт без сборщика — проще написать свою функцию

Лично я рекомендую начать с простой самописной функции, а библиотеки подключать только когда они действительно нужны для других задач.