„Ist das Objekt leer – oder nicht?“ Wir klären den ewigen Kopfschmerz eines JavaScript-Entwicklers
\n\nStellen Sie sich vor: Sie schreiben eine Anwendung, erhalten eine Antwort von der API und müssen herausfinden – sind Daten angekommen? Oder ist das Objekt leer und es ist Zeit, dem Benutzer einen Platzhalter anzuzeigen? Oder Sie verarbeiten ein Formular und müssen prüfen, ob der Benutzer mindestens ein Feld ausgefüllt hat? Die Situation ist jedem, der in JavaScript schreibt, schmerzlich vertraut.
\n\nEs scheint, was könnte einfacher sein? if (obj === {}) – und die Sache ist erledigt? Leider nein. In JavaScript sind zwei Objekte, selbst mit absolut identischem Inhalt, niemals gleich, es sei denn, es handelt sich um dasselbe Objekt im Speicher. Die Überprüfung eines leeren JavaScript-Objekts ist eine Aufgabe, die Tausende von Aufrufen auf Stack Overflow gesammelt und eine ganze Industrie von Lösungen hervorgebracht hat.
In diesem Artikel werden wir 5 zuverlässige Methoden analysieren, um festzustellen, ob ein leeres Objekt vorliegt. Von klassisch bis modern, von schnell bis sicher. Los geht's!
\n\nWas bedeutet „leeres Objekt“ in JavaScript?
\n\nBevor wir uns in den Code stürzen, lassen Sie uns die Begriffe klären. Ein leeres Objekt in JavaScript ist ein Objekt, das keine eigenen aufzählbaren Eigenschaften besitzt. Das heißt, {} ist leer. Aber { name: „Alice“ } ist es nicht.
Eine wichtige Nuance: Jedes Objekt hat einen Prototyp (Object.prototype) und somit geerbte Eigenschaften (z. B. toString, hasOwnProperty). Diese interessieren uns nicht. Wir überprüfen nur das, was wir selbst hinzugefügt haben.
Eine weitere Falle ist null. Wenn eine Variable gleich null oder undefined ist, können wir nicht einmal ihre Methoden aufrufen. Daher prüfen wir immer zuerst, ob das Objekt existiert.
Methode 1: Object.keys() – der Goldstandard
\n\nDie beliebteste und empfohlene Methode im modernen JavaScript. Die Methode Object.keys() gibt ein Array der eigenen aufzählbaren Eigenschaften eines Objekts zurück. Wenn das Array leer ist, ist das Objekt leer.
function isEmpty(obj) {\n return Object.keys(obj).length === 0;\n}\n\n// Anwendungsbeispiele\nconsole.log(isEmpty({})); // true\nconsole.log(isEmpty({a: 1})); // false\nconsole.log(isEmpty({name: 'John', age: 30})); // false\n\nWarum funktioniert das? Object.keys() ignoriert geerbte Eigenschaften und gibt nur das zurück, was dem Objekt selbst gehört. Die Überprüfung eines Objekts auf Leere mit Object.keys() ist sauberer, lesbarer und schneller Code.
Wichtig: Diese Methode prüft nicht, ob der übergebene Wert ein Objekt ist. Wenn Sie einen String oder eine Zahl übergeben, gibt sie ein leeres Array zurück, und wir würden fälschlicherweise annehmen, dass das Objekt leer ist. Daher fügen wir zur Sicherheit eine Typprüfung hinzu:
\n\nfunction isEmptySafe(obj) {\n return obj && typeof obj === 'object' && Object.keys(obj).length === 0;\n}\n\nconsole.log(isEmptySafe('hello')); // false (String ist kein Objekt)\nconsole.log(isEmptySafe(null)); // false\nconsole.log(isEmptySafe({})); // true\n\nMethode 2: JSON.stringify() – unerwartet, aber funktional
\n\nManchmal nennen Programmierer diese Methode scherzhaft „Krücke“, aber sie funktioniert. Die Idee ist einfach: Das Objekt in eine JSON-Zeichenfolge serialisieren und mit '{}' vergleichen.
function isEmptyJSON(obj) {\n return JSON.stringify(obj) === '{}';\n}\n\nconsole.log(isEmptyJSON({})); // true\nconsole.log(isEmptyJSON({key: 'val'})); // false\n\nWarum ist diese Methode nicht ideal? Erstens ignoriert JSON.stringify() Funktionen, undefined und Symbole. Wenn ein Objekt eine Eigenschaft mit dem Wert undefined hat, verschwindet diese bei der Serialisierung einfach, und das Objekt wird als leer erkannt, obwohl es tatsächlich einen Schlüssel hat.
const obj = { a: undefined };\nconsole.log(isEmptyJSON(obj)); // true – sollte aber false sein!\n\nZweitens