← Назад к вопросам

Как определить что объект пустой?

1.2 Junior🔥 141 комментариев
#JavaScript Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# Как определить что объект пустой?

Это фундаментальный вопрос при работе с JavaScript. Есть несколько подходов, каждый имеет свои особенности.

1. Проверка Object.keys()

Самый надёжный способ — проверить количество собственных свойств объекта:

const isEmpty = (obj) => Object.keys(obj).length === 0;

const empty = {};
const filled = { name: "John" };

console.log(isEmpty(empty));   // true
console.log(isEmpty(filled));  // false

Это работает только с собственными перечисляемыми свойствами. Не проверяет унаследованные свойства из prototype.

2. Использование Object.entries()

Аналогичный подход, но возвращает массив пар [key, value]:

const isEmpty = (obj) => Object.entries(obj).length === 0;

console.log(isEmpty({}));        // true
console.log(isEmpty({a: 1}));    // false

3. JSON.stringify()

Способ через сериализацию:

const isEmpty = (obj) => JSON.stringify(obj) === "{}";

console.log(isEmpty({}));        // true
console.log(isEmpty({a: 1}));    // false

Это медленнее и имеет побочные эффекты, но понятно показывает намерение.

4. Перебор через for...in

Проверка наличия перечисляемых свойств:

const isEmpty = (obj) => {
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      return false;
    }
  }
  return true;
};

console.log(isEmpty({}));        // true
console.log(isEmpty({a: 1}));    // false

Это вариант из старого подхода, работает во всех браузерах, но verbose.

5. Проверка значение на null/undefined

Если объект может быть null или undefined:

const isEmpty = (obj) => {
  return obj === null || obj === undefined || Object.keys(obj).length === 0;
};

console.log(isEmpty(null));      // true
console.log(isEmpty({a: 1}));    // false

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

Для большинства случаев используйте Object.keys() — это современный стандарт, читаемо и эффективно:

const isEmpty = (obj) => Object.keys(obj).length === 0;

Если нужна проверка унаследованных свойств, используйте Object.getOwnPropertyNames() вместо Object.keys().

Для типизированных проектов на TypeScript стоит добавить guard:

const isEmpty = (obj: Record<string, any>): obj is {} => {
  return Object.keys(obj).length === 0;
};
Как определить что объект пустой? | PrepBro