Wie prüfe ich ob ein JavaScript-Objekt leer ist?

Jun 11 (23:42)

Es kommt öfters vor, dass ein AJAX-Request ein leeres Objekt zurückliefert, also let obj = {} . Mit jQuery gibt es eine einfache Möglichkeit zu prüfen ob das Objekt leer ist:

let obj = {}
jQuery.isEmptyObject(obj) // => true

Wie kann man das aber ohne jQuery machen?

Übersicht der Kommentare

  • Das geht am einfachsten mit JSON.stringify(obj) === JSON.stringify({});

    cool_coder · Jun 14 (00:20)
Alle Kommentare
matthias Jun 16 (12:16)

Um mit den meisten Browsern kompatibel zu bleiben, können wir am einfachsten prüfen, ob ein Objekt "own properties" besitzt:

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

Die hasOwnProperty Methode gibt true auch dem Fall zurück, wenn eine Eigenschaft "undefined" oder "null" ist:

var o = new Object();
o.foo = null;
o.hasOwnProperty('foo');   // ist true
o.bar = undefined;  
o.hasOwnProperty('bar');   // ist true
// test mit isEmpty:
isEmpty(o)  // ist false
isEmpty({})  // ist true

Wie schon im Kommentar erwähnt, funktioniert es auch mit dem String-Vergleich JSON.stringify:

JSON.stringify(obj) == '{}'

Allerding ist diese Lösung wohl ziemlich langsam.

Für ECMA 5 funktioniert Vergleich mit Object.keys besser:

const empty = Object.keys(obj).length === 0 && obj.constructor === Object

Die zusätzliche Prüfung mit obj.constructor === Object brauchen wir zB. bei Date oder Array weil Object.keys(new Array()) auch 0 zurückgibt. Ab ES6 können wir auch Object.entries verwenden:

const empty = Object.entries(obj).length === 0 && obj.constructor === Object;
0 0 0
Noch keine Stimmen abgegeben
Durch die Nutzung dieser Website erklären Sie sich mit der Verwendung von Cookies einverstanden. Außerdem werden teilweise auch Cookies von Diensten Dritter gesetzt. Genauere Informationen finden Sie in unserer Datenschutzerklärung sowie im Impressum.