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?
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?
if(Object.getOwnPropertyNames(obj).length === 0){
//is empty
}
siehe http://bencollier.net/2011/04/javascript-is-an-object-empty/
Die Option Object.getOwnPropertyNames({}).length ist 10 mal langsamer als die Option (for...in...) - ich schlage vor, sie als Möglichkeit zu vermeiden, um zu testen, ob ein Objekt leer ist.
Das ist langsam, und bei dieser Art von Dienstprogramm kommt es auf Geschwindigkeit an. Schneller Leistungstest hier: jsperf.com/leeres-objekt-test
Dies ist eine sehr langsame Option - ich schlage vor, stattdessen die Option (for...in) zu verwenden
Wie kann der obige Kommentar 4 Upvotes haben? Ja, Object.keys
ist eine Standardmethode, aber Objekte haben keine Schlüsseleigenschaft. Daher wird dieser Code jedes Objekt als leer melden, es sei denn, es hat zufällig eine Eigenschaft namens key
mit einem Wert, der wiederum als eine Eigenschaft namens length
die nicht Null ist. Schrecklich!
Alte Frage, aber ich hatte gerade das Problem. Einschließlich JQuery ist nicht wirklich eine gute Idee, wenn Ihr einziger Zweck ist zu überprüfen, ob das Objekt nicht leer ist. Stattdessen, nur tief in Der Code von JQuery und Sie werden die Antwort erhalten:
function isEmptyObject(obj) {
var name;
for (name in obj) {
if (obj.hasOwnProperty(name)) {
return false;
}
}
return true;
}
Die Verwendung von Object.keys(obj).length (wie oben für ECMA 5+ vorgeschlagen) ist bei leeren Objekten 10 mal langsamer! Bleiben Sie bei der "old school" (for...in) Option.
Getestet unter Node, Chrome, Firefox und IE 9, wird deutlich, dass für die meisten Anwendungsfälle:
Unterm Strich ist die Leistung zu nutzen:
function isEmpty(obj) {
for (var x in obj) { return false; }
return true;
}
oder
function isEmpty(obj) {
for (var x in obj) { if (obj.hasOwnProperty(x)) return false; }
return true;
}
Detaillierte Testergebnisse und Testcode finden Sie unter Ist das Objekt leer?
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.