Если важны symbol и non-enumerable own-ключи — Reflect.ownKeys(obj).length === 0. Отдельно валидируйте вход: null, примитивы, массивы, Map/Set могут требовать другой критерий (size, length).
Итог
Пустота — договорённость; для обычных plain objects хватает Object.keys(...).length === 0.
Как надёжно проверить, что объект пустой? · Sobeso