Hoe test ik op een leeg JavaScript-object?

Na een AJAX verzoek, kan mijn applicatie soms een leeg object teruggeven, zoals:

var a = {};

Hoe kan ik controleren of dat'het geval is?

Er is geen gemakkelijke manier om dit te doen. Je zult expliciet over de eigenschappen moeten lopen:

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

    return true;
}

Als ECMAScript 5 ondersteuning beschikbaar is, kun je in plaats daarvan Object.keys() gebruiken:

function isEmpty(obj) {
    return Object.keys(obj).length === 0;
}
Commentaren (16)
  1. Gewoon een workaround. Kan uw server een speciale eigenschap genereren in geval van geen gegevens?

Bijvoorbeeld:

    var a = {empty:true};

Dan kun je het gemakkelijk controleren in je AJAX callback code.

  1. Een andere manier om het te controleren:

     if (a.toSource() === "({})")  // dan 'a' is leeg

EDIT: Als je een JSON bibliotheek gebruikt (bijv. JSON.js) dan kun je de JSON.encode() functie proberen en het resultaat testen tegen een lege waarde string.

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