3893 Stimmen

Wie kann ich auf ein leeres JavaScript-Objekt testen?

Nach einer AJAX-Anfrage kann es vorkommen, dass meine Anwendung ein leeres Objekt zurückgibt, z. B.:

var a = {};

Wie kann ich überprüfen, ob das der Fall ist?

16voto

Jesse Punkte 5980

Die richtige Antwort lautet:

const isEmptyObject = obj =>
  Object.getOwnPropertyNames(obj).length === 0 &&
  Object.getOwnPropertySymbols(obj).length === 0 &&
  Object.getPrototypeOf(obj) === Object.prototype;

Damit wird dies überprüft:

  • Das Objekt hat keine eigenen Eigenschaften (unabhängig von der Aufzählbarkeit).
  • Das Objekt hat keine eigenen Eigenschaftssymbole.
  • Der Prototyp des Objekts ist genau Object.prototype .

Mit anderen Worten: Das Objekt ist nicht von einem Objekt zu unterscheiden, das mit {} .

15voto

GibboK Punkte 67729

Das folgende Beispiel zeigt, wie man prüft, ob ein JavaScript-Objekt leer ist, d.h. keine eigenen Eigenschaften hat.

Das Skript funktioniert mit ES6.

const isEmpty = (obj) => {
    if (obj === null ||
        obj === undefined ||
        Array.isArray(obj) ||
        typeof obj !== 'object'
    ) {
        return true;
    }
    return Object.getOwnPropertyNames(obj).length === 0;
};
console.clear();
console.log('-----');
console.log(isEmpty(''));           // true
console.log(isEmpty(33));           // true
console.log(isEmpty([]));           // true
console.log(isEmpty({}));           // true
console.log(isEmpty({ length: 0, custom_property: [] })); // false
console.log('-----');
console.log(isEmpty('Hello'));      // true
console.log(isEmpty([1, 2, 3]));    // true
console.log(isEmpty({ test: 1 }));  // false
console.log(isEmpty({ length: 3, custom_property: [1, 2, 3] })); // false
console.log('-----');
console.log(isEmpty(new Date()));   // true
console.log(isEmpty(Infinity));     // true
console.log(isEmpty(null));         // true
console.log(isEmpty(undefined));    // true

14voto

JQuery hat eine besondere Funktion isEmptyObject() für diesen Fall:

jQuery.isEmptyObject({}) // true
jQuery.isEmptyObject({ foo: "bar" }) // false

Lesen Sie mehr auf http://api.jquery.com/jQuery.isEmptyObject/

8voto

Anthony D'Amato Punkte 707

Um wirklich zu akzeptieren NUR {} ist der beste Weg, um es in Javascript mit Lodash zu tun:

_.isEmpty(value) && _.isPlainObject(value)

8voto

Imran Ahmad Punkte 6774

In der Zwischenzeit können wir eine Funktion haben, die nach allen "leeren" Dateien sucht, wie null, undefiniert, '', ' ', {}, [] .

var isEmpty = function(data) {
  if (typeof(data) === 'object') {
    if (JSON.stringify(data) === '{}' || JSON.stringify(data) === '[]') {
      return true;
    } else if (!data) {
      return true;
    }
    return false;
  } else if (typeof(data) === 'string') {
    if (!data.trim()) {
      return true;
    }
    return false;
  } else if (typeof(data) === 'undefined') {
    return true;
  } else {
    return false;
  }
}

//Use cases and results.

console.log(isEmpty()); // true
console.log(isEmpty(null)); // true
console.log(isEmpty('')); // true
console.log(isEmpty('  ')); // true
console.log(isEmpty(undefined)); // true
console.log(isEmpty({})); // true
console.log(isEmpty([])); // true
console.log(isEmpty(0)); // false
console.log(isEmpty('Hey')); // false

4 Stimmen

Sie sollten Ihre Daten in einer Dienstprogrammfunktion wie dieser nicht stringifizieren. Stellen Sie sich vor, Sie hätten ein Objekt mit 1 GB Daten darin gespeichert und wollten diese Funktion darauf anwenden - Sie würden das gesamte Objekt stringifizieren, nur um zu prüfen, ob es etwas enthält? Verwenden Sie einfach Object.keys()

0 Stimmen

Schön. Genau das, wonach ich gesucht habe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X