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?
Eine andere Alternative ist die Verwendung von is.js (14kB) im Gegensatz zu jquery (32kB), lodash (50kB), oder Unterstrich (16,4kB). is.js erwies sich als die schnellste Bibliothek unter den oben genannten Bibliotheken, die zur Feststellung, ob ein Objekt leer ist, verwendet werden kann.
http://jsperf.com/check-empty-object-using-libraries
Offensichtlich sind nicht alle diese Bibliotheken genau das gleiche, so dass, wenn Sie brauchen, um leicht zu manipulieren das DOM dann jquery könnte immer noch eine gute Wahl sein, oder wenn Sie mehr als nur eine Typenprüfung benötigen, dann lodash o Unterstrich könnte gut sein. Was die is.js Hier ist die Syntax:
var a = {};
is.empty(a); // true
is.empty({"hello": "world"}) // false
Wie Unterstriche und Lodashs _.isObject()
ist dies nicht ausschließlich für objects
sondern gilt auch für arrays
y strings
.
Unter der Haube verwendet diese Bibliothek Object.getOwnPropertyNames
was ähnlich ist wie Object.keys
sondern Object.getOwnPropertyNames
ist eine gründlichere Methode, da sie aufzählbare und nicht aufzählbare Eigenschaften wie beschrieben zurückgibt ici .
is.empty = function(value) {
if(is.object(value)){
var num = Object.getOwnPropertyNames(value).length;
if(num === 0 || (num === 1 && is.array(value)) || (num === 2 && is.arguments(value))){
return true;
}
return false;
} else {
return value === '';
}
};
Wenn Sie keine Bibliothek einbinden wollen (was verständlich ist) und wissen, dass Sie nur Objekte überprüfen (keine Arrays oder Strings), dann sollte die folgende Funktion Ihren Bedürfnissen entsprechen.
function isEmptyObject( obj ) {
return Object.getOwnPropertyNames(obj).length === 0;
}
Das ist nur ein bisschen schneller als is.js, weil man nicht prüft, ob es ein Objekt ist.
IsEmpty Objekt, das unerwartet seine Bedeutung verloren hat, d.h.: es ist Programmierung Semantik als unser berühmter Guru von Yahoo die benutzerdefinierten nicht aufzählbaren Objekteigenschaften bei der ECMA vorstellte und sie akzeptiert wurden.
[ Wenn Sie die Geschichte nicht mögen, können Sie direkt zum Arbeitscode übergehen ]
Ich sehe viele gute Antworten \ Lösungen für diese Frage \ Problem. Es ist jedoch nicht der richtige Weg, die neuesten Erweiterungen von ECMA Script zu übernehmen. Wir haben früher das Web zurückgehalten, um Netscape 4.x und Netscape-basierte Seiten und Projekte am Leben zu erhalten, die (nebenbei bemerkt) extrem primitiv, rückständig und idiosynkratisch waren und sich weigerten, neue W3C-Standards und Vorschläge zu verwenden [ die für die damalige Zeit ziemlich revolutionär und programmiererfreundlich waren ], während wir jetzt brutal gegen unser eigenes Erbe vorgehen.
Die Abschaffung von Internet Explorer 11 ist schlichtweg falsch! Ja, einige alte Krieger, die Microsoft infiltriert haben und seit der Ära des "Kalten Krieges" schlummern, haben dem zugestimmt - aus den falschen Gründen. - Aber das macht es noch lange nicht richtig!
Nutzung einer neu eingeführten Methode \property in Ihre Antworten ein und überreichen Sie sie als Entdeckung ("das war schon immer da, aber wir haben es nicht bemerkt"), sondern eine neue Erfindung (für das, was es wirklich ist), ist etwas "grün" und schädlich. Solche Fehler habe ich vor 20 Jahren gemacht, als ich noch nicht wusste, was da drin ist, und alles, wofür ich eine Referenz finden konnte, als gängige Arbeitslösung behandelte...
Abwärtskompatibilität ist wichtig!
Wir wissen es nur noch nicht. Deshalb ist es mir ein Bedürfnis, meine "jahrhundertealte" generische Lösung mitzuteilen, die auch in der unvorhergesehenen Zukunft rückwärts- und vorwärtskompatibel bleibt.
Es gab zahlreiche Angriffe auf die in Betreiber aber ich denke, dass die Leute, die das tun, endlich zur Vernunft gekommen sind und wirklich angefangen haben, eine echte Dynamic Type Language wie JavaScript und ihre schöne Natur zu verstehen und zu schätzen.
Meine Methoden zielen darauf ab, einfach und nuklear zu sein, und aus den oben genannten Gründen nenne ich sie nicht "leer", weil die Bedeutung dieses Wortes nicht mehr zutreffend ist. Enumerable" scheint das Wort mit der genauen Bedeutung zu sein.
function isEnum( x ) { for( var p in x )return!0; return!1 };
Einige Anwendungsfälle:
isEnum({1:0})
true
isEnum({})
false
isEnum(null)
false
Vielen Dank fürs Lesen!
Wir können mit vanilla js mit Handhabung null oder undefiniert überprüfen auch wie folgt,
function isEmptyObject(obj) {
return !!obj && Object.keys(obj).length === 0 && obj.constructor === Object;
}
//tests
isEmptyObject(new Boolean()); // false
isEmptyObject(new Array()); // false
isEmptyObject(new RegExp()); // false
isEmptyObject(new String()); // false
isEmptyObject(new Number()); // false
isEmptyObject(new Function()); // false
isEmptyObject(new Date()); // false
isEmptyObject(null); // false
isEmptyObject(undefined); // false
isEmptyObject({}); // true
Dieser einzeilige Code hilft auch beim Fallback zu älteren Browsern.
var a = {}; //if empty returns false
(Object.getOwnPropertyNames ? Object.getOwnPropertyNames(a).length !== 0 : (function(){ for(var key in a) break; return !!key })()) //Returns False
var a = {b:2}; //if not empty returns true
(Object.getOwnPropertyNames ? Object.getOwnPropertyNames(a).length !== 0 : (function(){ for(var key in a) break; return !!key })()) //Returns true
Object.getOwnPropertyNames ist in ECMA-5 implementiert. Die obige Zeile funktioniert in älteren Browsern mit einer Fallback-Funktion.
Eine weitere schnelle Lösung ist die Überprüfung der
length
Eigenschaft vonObject.keys
,Object.entries
oObject.values
Wissensartikel: In diesem SO-Beitrag finden Sie die genauen Unterschiede zwischen Object.keys Vs Object.getOwnPropertyNames
Zucker.JS stellt zu diesem Zweck erweiterte Objekte zur Verfügung. Der Code ist sauber und einfach:
Erstellen Sie ein erweitertes Objekt:
a = Object.extended({})
Überprüfen Sie die Größe:
a.size()
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.