После AJAX-запроса мое приложение иногда может возвращать пустой объект, например:
var a = {};
Как я могу проверить, так ли это?
После AJAX-запроса мое приложение иногда может возвращать пустой объект, например:
var a = {};
Как я могу проверить, так ли это?
if( Object.entries(a).length > 0){ //do }
Ответы:
ECMA 5+ :
Обратите внимание, что это создает ненужный массив (возвращаемое значение
keys
).Pre-ECMA 5:
JQuery :
Лодаш :
Подчеркнуть :
Хук
ExtJS
AngularJS (версия 1)
Ramda
источник
Object.keys(new Date()).length === 0
; поэтому этот ответ может вводить в заблуждение.(new Date()).constructor === Date
или , наоборот,({}).constructor === Object
.Object.keys()
не проверяет не перечисляемые свойства или символы. Вам нужно использоватьObject.getOwnPropertyNames()
иObject.getOwnPropertySymbols()
вместо. Кроме того,Object.getPrototypeOf()
это правильный способ получить прототип объекта.obj.constructor
может быть легко подделан. Пример:function Foo() {} Foo.prototype.constructor = Object; (new Foo()).constructor === Object // true
.Нет простого способа сделать это. Вы должны будете зациклить свойства явно:
Если доступна поддержка ECMAScript 5 , вы можете использовать
Object.keys()
вместо:источник
isEmpty()
, поэтому она должна вернуться,false
если у нее есть свойствоДля тех из вас, кто имеет ту же проблему, но использует jQuery, вы можете использовать jQuery.isEmptyObject .
источник
underscore.js
...Это мое предпочтительное решение:
источник
Object.keys(new Date()).length === 0
; поэтому этот ответ может вводить в заблуждение.new Date()
это не объект.nd = new Date(); nd.constructor === Object;
результаты вfalse
.Ты можешь использовать Underscore.js .
источник
см. http://bencollier.net/2011/04/javascript-is-an-object-empty/
источник
Object.getOwnPropertyNames(new Date()).length === 0
; поэтому этот ответ может вводить в заблуждение.Как насчет использования JSON.stringify? Это почти доступно во всех современных браузерах.
источник
Я просто столкнулся с подобной ситуацией. Я не хотел использовать JQuery, и хотел сделать это, используя чистый Javascript.
И то, что я сделал, использовало следующее условие, и оно сработало для меня.
Для не равно, используйте это:
JSON.stringify(obj) !== '{}'
Проверьте это JSFiddle
источник
Старый вопрос, но только что был вопрос. Включение JQuery не очень хорошая идея, если ваша единственная цель - проверить, не является ли объект пустым. Вместо этого просто углубитесь в код JQuery , и вы получите ответ:
источник
Существует простой способ, если вы используете более новый браузер.
Object.keys(obj).length == 0
источник
keys
собственность?Object.keys
это стандартный метод, но у объектов нет свойства keys. Таким образом, этот код будет сообщать о любом объекте как о пустом, за исключением того, что случайно получено свойство, имя которогоkey
имеет значение, которое снова в качестве свойства,length
которое не равно нулю. Ужасный!Object.keys(new Date()).length === 0
; поэтому этот ответ может вводить в заблуждение.Представление
Сегодня 2020.01.17 я выполняю тесты на MacO HighSierra 10.13.6 на Chrome v79.0, Safari v13.0.4 и Firefox v72.0 для выбранных решений.
Выводы
for-in
(A, J, L, M) являются самыми быстрымиJSON.stringify
(B, K) являются медленнымиObject
(N) является медленнымподробности
Ниже во фрагменте представлены 15 решений. Если вы хотите запустить тест производительности на вашем компьютере, нажмите ЗДЕСЬ .
Показать фрагмент кода
источник
Использование Object.keys (obj) .length (как предложено выше для ECMA 5+) в 10 раз медленнее для пустых объектов! сохранить с старой школы (для ... в) вариант.
Протестировано под Node, Chrome, Firefox и IE 9, становится очевидным, что для большинства случаев использования:
В конечном итоге, используйте:
или
См. Подробные результаты тестирования и тестовый код на странице Пусто ли объект?
источник
Object.keys
медленно, но меньше кода. На маленькой странице, где это называется ... может быть, в 10 раз ... Будет ли это все еще медленнее, учитывая дополнительное время разбора дополнительного кода?Вы можете проверить количество ключей объекта:
источник
Просто обходной путь. Может ли ваш сервер генерировать какое-то специальное свойство в случае отсутствия данных?
Например:
Тогда вы можете легко проверить это в своем коде обратного вызова AJAX.
Еще один способ проверить это:
РЕДАКТИРОВАТЬ : Если вы используете любую библиотеку JSON (например, JSON.js), то вы можете попробовать функцию JSON.encode () и проверить результат по пустой строке значения.
источник
toSource()
не является стандартным и не работает в IE или Opera (и, возможно, в других браузерах, которые я не проверял)toSource
свойства в разделе 15.2.4; согласно MDC, он был представлен в JS1.3 (т.е. Netscape Navigator 4.06), но его нет в ECMA-262, 3-е издание!toSource()
это ужасный способ сделать это (как естьJSON.encode()
). Нужно создать строку, представляющую весь ваш объект, чтобы просто проверить, пустой ли он. Преобразование вещей в строки сопряжено с дополнительными затратами, но, кроме того, потребуется преобразовать миллион вещей, если у вашего объекта есть миллион свойств, а если вы просто посмотрите на одно, вы узнаете, что он не пустой.Я создал полную функцию, чтобы определить, является ли объект пустым.
Оно использует
Object.keys
из ECMAScript 5 (ES5) функциональности , если это возможно , чтобы достичь максимальной производительности (см таблицу совместимости ) и резервные объявления к наиболее совместимый подход для более старых двигателей (браузеры).Решение
Вот суть этого кода.
А вот и JSFiddle с демонстрацией и простым тестом.
Надеюсь, это кому-нибудь поможет. Ура!
источник
null
объекта.Object.keys(new Date()).length === 0
; поэтому этот ответ может вводить в заблуждение.Я использую это.
Например:
отсюда
Обновить
ИЛИ
Вы можете использовать реализацию jQuery isEmptyObject
источник
В следующем примере показано, как проверить, является ли объект JavaScript пустым, если мы подразумеваем, что под пустым у него нет собственных свойств.
Скрипт работает на ES6.
источник
источник
Object.keys
илиObject.values
?источник
Object
с помощью метода через цепочку прототипов, потому что это перечислимо, иfor in
оператор проходит через перечисляемые свойства.jQuery имеет специальную функцию
isEmptyObject()
для этого случая:Узнайте больше на http://api.jquery.com/jQuery.isEmptyObject/
источник
Я бы пошел для проверки, если у него есть хотя бы один ключ. Этого было бы достаточно, чтобы сказать мне, что это не пусто.
источник
false
значение? результат будетfalse
неверным.Под капотом все пустые методы проверки во всех библиотеках используют логику проверки ключей объекта. Это странный способ сделать его понятным, который вы можете поместить в метод, описанный здесь .
Разработанный в ES5 , проще говоря, вы можете проверить длину ключей объекта, используя
Object.Keys
метод, который принимает ваш объект в качестве параметра:Или, если вы используете Lodash (вы должны быть) тогда.
источник
Вы можете использовать этот простой код, который не использовал jQuery или другие библиотеки
Класс JSON и его функции ( синтаксический анализ и stringify ) очень полезны, но есть некоторые проблемы с IE7, которые вы можете исправить с помощью этого простого кода http://www.json.org/js.html .
Другой простой способ (самый простой способ):
вы можете использовать этот способ без использования объекта jQuery или JSON .
источник
JSON.stringify
Решение не может быть выполнено, если объект содержит не строковые свойства, такие как функции или «неопределенные», хотя это и является крайним случаем.Лучший способ, который я нашел:
Работает на:
источник
if (!obj && obj !== 0)
,Мой дубль:
Просто я не думаю, что все браузеры в
Object.keys()
настоящее время реализуют .источник
Object.keys(new Date()).length === 0
; поэтому этот ответ может вводить в заблуждение.Если jQuery и веб-браузер недоступны, в underscore.js также есть функция isEmpty.
Кроме того, он не предполагает, что входной параметр является объектом. Для списка, или строки, или неопределенного, это также приведет к правильному ответу.
источник
Предостережение! Остерегайтесь ограничений JSON.
дисплеи
источник
Правильный ответ:
Это проверяет, что:
Object.prototype
.Другими словами, объект неотличим от объекта, созданного с помощью
{}
.источник
В дополнение к ответу Thevs:
это jquery + jquery.json
источник
$.isEmptyObject()
, не тратьте циклы с неочевидными конверсиями.Sugar.JS предоставляет расширенные объекты для этой цели. Код прост и понятен:
Сделайте расширенный объект:
Проверьте его размер:
источник