¿Cómo puedo comprobar si un objeto JavaScript está vacío?

Después de una petición AJAX, a veces mi aplicación puede devolver un objeto vacío, como:

var a = {};

¿Cómo puedo comprobar si ese es el caso?

No hay una manera fácil de hacer esto. Tendrás que hacer un bucle sobre las propiedades explícitamente:

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

    return true;
}

Si está disponible el soporte de ECMAScript 5, puede utilizar Object.keys() en su lugar:

function isEmpty(obj) {
    return Object.keys(obj).length === 0;
}
Comentarios (16)
  1. Sólo una solución. ¿Puede su servidor generar alguna propiedad especial en caso de que no haya datos?

Por ejemplo:

    var a = {empty:true};

Entonces puedes comprobarlo fácilmente en tu código de devolución de llamada AJAX.

  1. Otra forma de comprobarlo:

     if (a.toSource() === "({})")  // entonces 'a' está vacío

EDIT: Si usas cualquier librería JSON (por ejemplo, JSON.js) entonces puedes probar la función JSON.encode() y comprobar el resultado contra una cadena de valores vacía.

Comentarios (11)
function isEmpty(obj) {
  for(var i in obj) { return false; }
  return true;
}
Comentarios (1)