Как в 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.