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

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

var a = {};

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

Ответы [ 44 ]

0 голосов
/ 15 августа 2018

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

function isEmpty(obj: Object): Boolean {
    for (const prop in obj) {
        if (obj.hasOwnProperty(prop)) {
            if (obj[prop] instanceof Object) {
                const rtn = this.isEmpty(obj[prop]);
                if (rtn === false) {
                  return false;
                }
            } else if (obj[prop] || obj[prop] === false) {
                return false;
            }
        }
    }
    return true;
}
0 голосов
/ 27 июня 2018

Странно, я не нахожу здесь сравнение по значениям (возможно, пропущено среди стольких решений). Я хотел бы охватить случай, когда объект считается пустым, если все его значения не определены:

const isObjectEmpty = ( obj ) => Object.values( obj  ).every( val => typeof val === "undefined" );

isObjectEmpty({ foo: undefined, bar: undefined }): // true
isObjectEmpty({ foo: false, bar: null }): // false

Таким образом, мы можем расширять, скажем, объект параметров, только если предоставлены дополнительные параметры

function onSubmit({ fullPage, width, height }) {
const baseOptions = { fullPage },
      clip = { width, height },
      options = isObjectEmpty( clip ) ? baseOptions : { ...baseOptions, clip };
//...
}
0 голосов
/ 06 июня 2014

Я возвращал пустой JSON-ответ для вызова AJAX, а в IE8 jQuery.isEmptyObject () не проверялся правильно. Я добавил дополнительную проверку, которая, кажется, правильно его ловит.

.done(function(data)
{  
    // Parse json response object
    var response = jQuery.parseJSON(data);

    // In IE 8 isEmptyObject doesn't catch the empty response, so adding additional undefined check
    if(jQuery.isEmptyObject(response) || response.length === 0)
    {
        //empty
    }
    else
    {
        //not empty
    }
});
0 голосов
/ 10 июня 2015

Вы можете определить свой собственный прототип объекта, непосредственно перед его использованием или в начале вашего кода.

Определение должно выглядеть так:

Object.prototype.hasOwnProperties = function()
{ 
  for (var k in this)
  { 
    if ( this.hasOwnProperty(k) )
    { 
      return true;
    } 
  }
  return false;
}

Вот пример использования:

var a = {};

while ( a.status !== "finished" )
{  
  if ( status === "processing" )
  {
    a.status = "finished";  
  }
  
  if ( status === "starting" )
  {
    a.status = "processing";  
  }
  
  if ( !a.hasOwnProperties() )
  {
    a.status = "starting";
  }
}

Наслаждайтесь! : -)

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