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. Unsere Datenschutzbestimmungen können Sie hier nachlesen