Как проверить пустой объект js?
Обычный объект параметров, иногда приходит {}, хочу проверить отсутствие полей, но условие if с ним все равно срабатывает, сравнение с новым {} тоже не помогает.
Работа и карьера
Программирование
Учёба и образование
Компьютеры и связь
Животные и питомцы
Ваш вопрос
Обычный объект параметров, иногда приходит {}, хочу проверить отсутствие полей, но условие if с ним все равно срабатывает, сравнение с новым {} тоже не помогает.
Обычный объект параметров
Для объекта с собственными перечисляемыми строковыми полями подойдет Object.keys(params).length === 0. Метод возвращает массив имен таких полей, а длина показывает их количество. Это простой критерий для структуры, которую вы заранее договорились считать объектом параметров.
Почему прежние условия не подходят
Любой обычный объект является истинным значением, независимо от числа его полей. Поэтому if с пустым объектом срабатывает. При сравнении с новым литералом {} справа создается другой объект, и строгое равенство проверяет ссылки, а не структуру содержимого.
Проверка входа
До перечисления свойств убедитесь, что значение не null и соответствует ожидаемому типу. Массив или строка могут иметь свои перечисляемые позиции, но это не делает их объектами параметров по смыслу вашей задачи.
Границы метода
Object.keys не включает унаследованные, символьные и неперечисляемые свойства. Поэтому нулевая длина результата означает отсутствие именно указанной категории полей, а не доказательство, что в любом возможном объекте совсем ничего нет. Например, Date может хранить свое значение без обычных перечисляемых полей.
Другой критерий
Если нужны все собственные имена, включая символы и неперечисляемые свойства, рассмотрите Reflect.ownKeys. Но и такая проверка не заменяет понимание типа объекта и его внутренних данных. Универсальное слово пустой недостаточно точное для всех значений JavaScript.
Практика
Для ваших параметров достаточно согласовать формат обычного объекта и проверить его поля. Отдельно решите, считается ли поле со значением undefined, null или пустой строкой заполненным. Наличие поля и допустимость его значения — разные условия.
Если речь об обычном объекте параметров с перечисляемыми строковыми полями, используйте Object.keys(params).length === 0. Например, для {} это true, а для { page: 1 } — false.
Проверка if (params) отвечает на другой вопрос: объект, даже пустой, является истинным значением. Сравнение params === {} тоже не подходит, потому что справа создается другой объект.
Заранее обработайте null, undefined и неподходящий тип. И определите смысл пустоты: Object.keys не показывает символьные и неперечисляемые свойства. У экземпляра Date может не быть таких перечисляемых полей, но называть его пустым объектом параметров было бы неверно. Проверка должна соответствовать оговоренному виду данных.
4o
Object.keys(obj).length === 0.Object.keys учитывает собственные перечисляемые строковые свойства. Если важны другие свойства, нужно уточнить критерий пустоты.
Пока нет премиум-вопросов в подборке
Не нашли то, что искали?
Задайте свой вопрос
Ответить на вопрос