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?

37voto

NiKo Punkte 10774

Meine Meinung:

function isEmpty(obj) {
  return Object.keys(obj).length === 0;
}

var a = {
  a: 1,
  b: 2
}
var b = {}

console.log(isEmpty(a)); // false
console.log(isEmpty(b)); // true

Nur, ich glaube nicht, dass alle Browser die Object.keys() derzeit.

3 Stimmen

Object.keys(new Date()).length === 0 Diese Antwort kann also irreführend sein.

3 Stimmen

Das hängt davon ab, ob Sie ein Datum als immer "voll" betrachten, obwohl es nie Schlüssel preisgibt. Aber ich stimme zu, dass wenn das Ihr Plan ist, einige zusätzliche Instanceof Prüfung für Date-Konstruktor hinzufügen eine gute Option ist.

33voto

kiranvj Punkte 26968

Ich verwende dies.

function isObjectEmpty(object) {
  var isEmpty = true;
  for (keys in object) {
     isEmpty = false;
     break; // exiting since we found that the object is not empty
  }
  return isEmpty;
}

Beispiel:

var myObject = {}; // Object is empty
var isEmpty  = isObjectEmpty(myObject); // will return true;

// populating the object
myObject = {"name":"John Smith","Address":"Kochi, Kerala"}; 

// check if the object is empty
isEmpty  = isObjectEmpty(myObject); // will return false;

von hier

更新情報

OR

können Sie die jQuery-Implementierung von isEmptyObject verwenden

function isEmptyObject(obj) {
  var name;
  for (name in obj) {
    return false;
  }
  return true;
}

0 Stimmen

Hallo. Wenn Sie diese Funktion mit einer Zahl oder einem booleschen Wert testen, wird true oder false zurückgegeben, und das ist nicht das richtige Ergebnis. isObjectEmpty(true). isObjectEmpty(false). isObjectEmpty(1)

2 Stimmen

Wir prüfen, ob das Objekt leer ist, nicht ob der Datentyp ein Objekt ist. In Ihrem Fall, um zu prüfen, ob es sich um ein Objekt handelt, müssen wir etwas wie if(typeof a === "object") {...}

26voto

Thevs Punkte 3129
  1. Nur ein Workaround. Kann Ihr Server eine spezielle Eigenschaft erzeugen, wenn keine Daten vorhanden sind?

    Zum Beispiel:

    var a = {empty:true};

    Dann können Sie sie leicht in Ihrem AJAX-Callback-Code überprüfen.

  2. Eine andere Möglichkeit zur Überprüfung:

    if (a.toSource() === "({})")  // then 'a' is empty

EDITAR : Wenn Sie eine JSON-Bibliothek (z.B. JSON.js) verwenden, können Sie die Funktion JSON.encode() ausprobieren und das Ergebnis mit einem leeren Wertstring testen.

8 Stimmen

toSource() ist nicht standardisiert und funktioniert nicht in IE oder Opera (und möglicherweise anderen Browsern, die ich nicht überprüft habe)

0 Stimmen

Dies ist Standard in ECMA-262. Es gibt jedoch auch Nicht-Standard-Browser.

4 Stimmen

@Thevs: Vielleicht haben Sie ein anderes Exemplar der aktuellen Version von ECMA-262, aber in meinem ist keine toSource Eigenschaft in Abschnitt 15.2.4; laut MDC wurde sie in JS1.3 (d.h. Netscape Navigator 4.06) eingeführt, aber sie ist NICHT in ECMA-262, 3. Ausgabe!

26voto

Ericgit Punkte 4321

1. Verwendung von Object.keys

Object.keys gibt ein Array zurück, das die Eigenschaftsnamen des Objekts enthält. Wenn die Länge des Arrays 0 ist, dann wissen wir, dass das Objekt leer ist.

function isEmpty(obj) {
    return Object.keys(obj).length === 0 && empty.constructor === Object;
}

Wir können dies auch mit Object.values und Object.entries überprüfen. Dies ist normalerweise der einfachste Weg, um festzustellen, ob ein Objekt leer ist.

2. Schleifen über Objekteigenschaften mit for in

Die for in-Anweisung durchläuft die aufzählbare Eigenschaft von object in einer Schleife.

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

    return true;
}

Im obigen Code durchlaufen wir die Objekteigenschaften in einer Schleife, und wenn ein Objekt mindestens eine Eigenschaft hat, wird es in die Schleife aufgenommen und gibt false zurück. Wenn das Objekt keine Eigenschaften hat, wird true zurückgegeben.

3. JSON.stringify verwenden Wenn wir das Objekt stringifizieren und das Ergebnis einfach eine öffnende und schließende Klammer ist, wissen wir, dass das Objekt leer ist.

function isEmptyObject(obj){
    return JSON.stringify(obj) === '{}';
}

4. Verwendung von jQuery

jQuery.isEmptyObject(obj); 

5. Verwendung von Underscore und Lodash

_.isEmpty(obj);

Ressource

20voto

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

4 Stimmen

Das gilt auch, wenn z. B. eine JavaScript-Bibliothek die Object mit einer Methode über die Prototypenkette, da diese aufzählbar ist und die for in Anweisung schleift durch aufzählbare Eigenschaften.

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