Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
# Как определить что объект пустой?
Это фундаментальный вопрос при работе с 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;
};