Проверить пустой ли объект javascript

Метод 1: Использование метода Object.keys (объект): Требуемый объект может быть передан в метод Object.keys (объект), который будет возвращать ключи в объекте. Свойство length используется в результате для проверки количества ключей. Если свойство length возвращает 0 ключей, это означает, что объект пуст.

Синтаксис:

Пример:

ссылка на сайт
brightness_4
код

Выход:

  • Перед нажатием кнопки:
  • После нажатия на кнопку:

После AJAX-запроса иногда мое приложение может возвращать пустой объект, например:

Как я могу проверить, так ли это?

Нет простого способа сделать это. Вы должны будете зациклить свойства явно:

Если доступна поддержка ECMAScript 5 , вы можете использовать Object.keys() вместо этого:

Для тех из вас, кто имеет ту же проблему, но использует jQuery, вы можете использовать jQuery.isEmptyObject .

Это мое предпочтительное решение:

Вы можете использовать Underscore.js .

Как насчет использования JSON.stringify? Это почти доступно во всех современных браузерах.

Старый вопрос, но только что был вопрос. Включение JQuery не очень хорошая идея, если ваша единственная цель — проверить, не является ли объект пустым. Вместо этого просто углубитесь в код JQuery , и вы получите ответ:

Я просто столкнулся с подобной ситуацией. Я не хотел использовать JQuery, и хотел сделать это, используя чистый Javascript.

И то, что я сделал, использовало следующее условие, и оно сработало для меня.

Если не равно, используйте это: JSON.stringify(obj) !== ‘<>’

Существует простой способ, если вы используете более новый браузер. Object.keys(obj).length == 0

Я создал полную функцию, чтобы определить, является ли объект пустым.

Он использует функциональные возможности Object.keys из ECMAScript 5 (ES5), если это возможно, для достижения максимальной производительности (см. Таблицу совместимости ) и откат к наиболее совместимому подходу для более старых механизмов (браузеров).

Читайте также  Почему объектив круглый а фотографии получаются прямоугольные

Решение

Вот суть этого кода.

А вот и JSFiddle с демонстрацией и простым тестом.

Надеюсь, это кому-нибудь поможет. Ура!

Просто обходной путь. Может ли ваш сервер генерировать какое-то специальное свойство в случае отсутствия данных?

Тогда вы можете легко проверить это в своем коде обратного вызова AJAX.

Еще один способ проверить это:

РЕДАКТИРОВАТЬ : Если вы используете любую библиотеку JSON (например, JSON.js), то вы можете попробовать функцию JSON.encode () и проверить результат по пустой строке значения.

Вы можете проверить количество ключей объекта:

Использование Object.keys (obj) .length (как предложено выше для ECMA 5+) в 10 раз медленнее для пустых объектов! сохранить с старой школы (для . в) вариант.

Протестировано под Node, Chrom, Firefox и IE 9, становится очевидно, что для большинства случаев использования:

  • (для . в . ) это самый быстрый вариант для использования!
  • Object.keys (obj) .length в 10 раз медленнее для пустых объектов
  • JSON.stringify (obj) .length всегда самый медленный (не удивительно)
  • Object.getOwnPropertyNames (obj) .length занимает больше времени, чем Object.keys (obj) .length может быть намного длиннее в некоторых системах.

В конечном итоге, используйте:

См. Подробные результаты тестирования и тестовый код на странице Пусто ли объект?

Я использую это.

Вы можете использовать реализацию jQuery isEmptyObject

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

Скрипт работает на ES6.

jQuery имеет специальную функцию isEmptyObject() для этого случая:

Вы можете использовать этот простой код, который не использовал jQuery или другие библиотеки

Класс JSON и его функции ( синтаксический анализ и stringify ) очень полезны, но есть некоторые проблемы с IE7, которые вы можете исправить с помощью этого простого кода http://www.json.org/js.html .
Другой простой способ (самый простой способ):
Вы можете использовать этот способ без использования объекта JQuery или JSON .

Читайте также  Принтер hp deskjet 3550 драйвер

Лучший способ, который я нашел:

Если jQuery и веб-браузер недоступны, в underscore.js также есть функция isEmpty.

Кроме того, он не предполагает, что входной параметр является объектом. Для списка, или строки, или неопределенного, это также приведет к правильному ответу.

Просто я не думаю, что все браузеры в настоящее время реализуют Object.keys() .

Я бы пошел для проверки, если у него есть хотя бы один ключ. Этого было бы достаточно, чтобы сказать мне, что это не пусто.

Предостережение! Остерегайтесь ограничений JSON.

Это проверяет, что:

  • Объект не имеет собственных свойств (независимо от перечисляемости).
  • Объект не имеет собственных символов свойств.
  • Прототипом объекта является именно Object.prototype .

Другими словами, объект неотличим от объекта, созданного с помощью <> .

В дополнение к ответу Thevs:

это jquery + jquery.json

Sugar.JS предоставляет расширенные объекты для этой цели. Код прост и понятен:

Сделайте расширенный объект:

Проверьте его размер:

Другой альтернативой является использование is.js (14 КБ) в отличие от jquery (32 КБ), lodash (50 КБ) или подчеркивания (16,4 КБ). is.js оказалась самой быстрой библиотекой среди вышеупомянутых библиотек, которую можно использовать для определения того, является ли объект пустым.

Очевидно, что все эти библиотеки не совсем одинаковы, поэтому, если вам нужно легко манипулировать DOM, тогда jquery может быть хорошим выбором, или если вам нужно больше, чем просто проверка типов, тогда lodash или underscore могут быть хорошими. Что касается is.js , вот синтаксис:

Как и _.isObject _.isObject() подчеркивания и lodash, это не только для objects но и для arrays и strings .

Под капотом эта библиотека использует Object.getOwnPropertyNames который похож на Object.keys но Object.getOwnPropertyNames более тщательный, поскольку он будет возвращать перечисляемые и не перечисляемые свойства, как описано здесь .

Читайте также  Почему принтер не печатает по сети

Если вы не хотите использовать библиотеку (что понятно) и знаете, что вы проверяете только объекты (не массивы или строки), тогда следующая функция должна соответствовать вашим потребностям.

Как правильно проверить в JavaScript, является ли объект пустым, или содержит какие-то свойства?

3 ответа 3

Но к сожелению, Object.keys() доступен не везде (нужно отметить галочку Show obsolete browsers? для того, чтобы увидеть все браузеры), поэтому можно воспользоваться полифилом, либо такой, например, функцией:

Либо так при помощи jQuery, если Вы не изменяли прототип Object :

Ссылка на основную публикацию
Adblock
detector