Come faccio a testare un oggetto JavaScript vuoto?

Dopo una richiesta AJAX, a volte la mia applicazione può restituire un oggetto vuoto, come:

var a = {};

Come posso controllare se questo è il caso?

Non c'è un modo semplice per farlo. Dovrai fare un loop sulle proprietà in modo esplicito:

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

    return true;
}

Se il supporto ECMAScript 5 è disponibile, potete usare invece Object.keys():

function isEmpty(obj) {
    return Object.keys(obj).length === 0;
}
Commentari (16)
  1. Solo un workaround. Il tuo server può generare qualche proprietà speciale in caso di assenza di dati?

Per esempio:

    var a = {empty:true};

Poi puoi facilmente controllarlo nel tuo codice di callback AJAX.

  1. Un altro modo per controllarlo:

     if (a.toSource() === "({})")  // allora 'a' è vuoto

EDIT: Se usi una qualsiasi libreria JSON (es. JSON.js) allora puoi provare la funzione JSON.encode() e testare il risultato contro la stringa di valore vuoto.

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