Как проверить наличие пустого объекта JavaScript? - PullRequest
2367 голосов
/ 25 марта 2009

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

var a = {};

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

Ответы [ 44 ]

4061 голосов
/ 20 августа 2015

ECMA 7 + :

// because Object.entries(new Date()).length === 0;
// we have to do some additional check
Object.entries(obj).length === 0 && obj.constructor === Object

ECMA 5 + :

// because Object.keys(new Date()).length === 0;
// we have to do some additional check
Object.keys(obj).length === 0 && obj.constructor === Object

Pre-ECMA 5:

function isEmpty(obj) {
  for(var prop in obj) {
    if(obj.hasOwnProperty(prop)) {
      return false;
    }
  }

  return JSON.stringify(obj) === JSON.stringify({});
}

JQuery

jQuery.isEmptyObject({}); // true

lodash

_.isEmpty({}); // true

Подчеркивание

_.isEmpty({}); // true

Хук

Hoek.deepEqual({}, {}); // true

ExtJS

Ext.Object.isEmpty({}); // true

AngularJS (версия 1)

angular.equals({}, {}); // true

Ramda

R.isEmpty({}); // true
791 голосов
/ 25 марта 2009

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

function isEmpty(obj) {
    for(var prop in obj) {
        if(obj.hasOwnProperty(prop))
            return false;
    }

    return true;
}

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

function isEmpty(obj) {
    return Object.keys(obj).length === 0;
}
550 голосов
/ 19 мая 2010

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

224 голосов
/ 12 июля 2014

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

var obj = {};
return Object.keys(obj).length; //returns 0 if empty or an integer > 0 if non-empty
195 голосов
/ 22 марта 2011

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

_.isEmpty({}); // true
110 голосов
/ 06 ноября 2013
if(Object.getOwnPropertyNames(obj).length === 0){
  //is empty
}

см. http://bencollier.net/2011/04/javascript-is-an-object-empty/

70 голосов
/ 24 января 2013

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

function isEmptyObject(obj){
    return JSON.stringify(obj) === '{}';
}
55 голосов
/ 31 января 2013

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

function isEmptyObject(obj) {
    var name;
    for (name in obj) {
        if (obj.hasOwnProperty(name)) {
            return false;
        }
    }
    return true;
}
49 голосов
/ 22 сентября 2014

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

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

var obj = {};
if(JSON.stringify(obj) === '{}') { //This will check if the object is empty
   //Code here..
}

Если не равно, используйте это: JSON.stringify(obj) !== '{}'

Проверьте это JSFiddle

33 голосов
/ 29 апреля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...