Как в JavaScript проверить переменную на null, undefined или пустую строку?
Универсальная проверка на "пустоту" в JavaScript
К сожалению, в JavaScript нет единой стандартной функции, которая бы проверяла сразу на null, undefined и пустую строку. Однако есть несколько элегантных способов реализовать такую проверку самостоятельно.
1. Самый простой способ — использовать логическое отрицание
В JavaScript существует понятие "falsy" (ложных) значений. К ним относятся:
false0""(пустая строка)nullundefinedNaN
Это значит, что вы можете написать очень короткую проверку:
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 — не изобретайте велосипед
- Если нужно проверять не только примитивы, но и коллекции
- Если вы пишете небольшой скрипт без сборщика — проще написать свою функцию
Лично я рекомендую начать с простой самописной функции, а библиотеки подключать только когда они действительно нужны для других задач.