Быстрый способ проверки пустого объекта в Javascript

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы быстро и надёжно проверить объект на пустоту, вполне подойдёт комбинация функции Object.keys() c методом .length:

JS
Скопировать код
const cat = {};
console.log(Object.keys(cat).length === 0); // даст true, если объект пуст – котик прячется? ¯\_(ツ)_/¯
Кинга Идем в IT: пошаговый план для смены профессии

Детальный анализ пустоты объекта

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

Совместимость и поиск альтернатив

Решение Object.keys(obj).length === 0 — элегантный и простой способ определить пустоту объекта, но оно может не работать в старых браузерах. Потому перед использованием Object.keys() или Object.getOwnPropertyNames(), убедитесь в их совместимости.

Учёт всех видов свойств

Если задача стоит в том, чтобы учесть все свойства объекта (включая не перечисляемые), можно воспользоваться Object.getOwnPropertyNames(obj).length === 0:

JS
Скопировать код
console.log(Object.getOwnPropertyNames(cat).length === 0); // true, если объект пуст
// У кота нет секретов!

jQuery – подстраховка для вашего браузера

Если ваша аудитория использует различные браузеры, jQuery представляет функцию $.isEmptyObject, которая может оказаться удобной:

JS
Скопировать код
console.log($.isEmptyObject(cat)); // true, если объект пуст – и jQuery тоже с котами в дружбе!

Библиотечная поддержка: путь к эффективности

Библиотеки Lodash и Underscore предлагают функцию _.isEmpty,которая может стать надёжным помощником в определении пустоты объекта.

JS
Скопировать код
console.log(_.isEmpty(cat));  // true, если объект пуст – не заблудился ли котик в lodash?

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

Циклическая обработка

Цикл for...in нередко выполняется быстрее, в частности, при работе с большими, не пустыми объектами:

JS
Скопировать код
function isObjectEmpty(object) {
    for (let key in object) {
        if (object.hasOwnProperty(key)) return false; // объект не пуст!
    }
    return true; // объект пуст! Или...?
}

Уворачивание от случайных попаданий

Старайтесь предусмотреть ситуации с null и undefined, чтобы избежать беспорядка в коде.

JS
Скопировать код
function isEmpty(value) {
    return value == null || (typeof value === 'object' && Object.keys(value).length === 0);
    // Ведь никогда не знаешь, что скрывается в тени. (¬‿¬)
}

Визуализация

Представьте объект JavaScript как парковку:

Проверяемая парковка:

JS
Скопировать код
const parkingLot = {}; // все места свободны...

Пуста ли она?

Анализируем код:

JS
Скопировать код
const isEmpty = (lot) => Object.keys(lot).length === 0; // считаем автомобили... или их отсутствие!

Итог? Если парковка пуста — 🟢, если занята — 🔴.

Библиотека или нативный код: выбор мудрых

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

Полезные материалы

  1. Object.keys() – JavaScript | MDN — детально о Object.keys().
  2. Как проверить, пуст ли объект JavaScript? – Stack Overflow — место, где программисты обмениваются опытом.
  3. Спецификация языка ECMAScript 2015 – ECMA-262 6-е издание — изучить спецификацию ES6 об Object.entries().
  4. JSON.stringify() – JavaScript | MDN — преобразование объектов в JSON для сравнения.
  5. Документация Lodash — все о функциях Lodash.
  6. typeof – JavaScript | MDNtypeof помогает определить тип данных.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой метод используется для проверки пустоты объекта?
1 / 5