Как да тествам за празен обект в JavaScript?

След заявка AJAX понякога приложението ми може да върне празен обект, например:

var a = {};

Как мога да проверя дали случаят е такъв?

Няма лесен начин да го направите. Ще трябва да направите изричен цикъл на свойствата:

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;
}
Коментари (16)
  1. Просто заобиколен вариант. Може ли вашият сървър да генерира някакво специално свойство в случай на липса на данни?

Например:

    var a = {empty:true};

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

  1. Друг начин да го проверите:

     if (a.toSource() === "({})")  // тогава 'a' е празен

EDIT: Ако използвате някоя библиотека за JSON (например JSON.js), можете да опитате функцията JSON.encode() и да проверите резултата срещу празен низ от стойности.

Коментари (11)
function isEmpty(obj) {
  for(var i in obj) { return false; }
  return true;
}
Коментари (1)