Vorausgesetzt, ich erkläre
var ad = {};
Wie kann ich überprüfen, ob dieses Objekt benutzerdefinierte Eigenschaften enthält?
javascript
Ricky
quelle
quelle
Object.keys
wäre die Verwendung am einfachsten:var a = [1,2,3];a.something=4;console.log(Object.keys(a))
Da es bereits Teil von ECMA 5 ist, können Sie es sicher shimen: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Object.defineProperty(obj, 'foo', {enumerable:false, value:'foo'})
.Mit der integrierten
Object.keys
Methode können Sie eine Liste der Schlüssel für ein Objekt abrufen und dessen Länge testen.quelle
var str = "MyString"; Object.keys(str);
, gibt die Konsole für jedes Zeichen 8 Tasten von 0 bis 7 aus. Oder verstehe ich die Antwort immer noch nicht.Was ist mit einer einfachen Funktion?
Der
hasOwnProperty
Methodenaufruf direkt auf demObject.prototype
dient nur dazu, etwas mehr Sicherheit zu bieten. Stellen Sie sich Folgendes mit einem normalenobj.hasOwnProperty(...)
Aufruf vor:Hinweis: (für die Zukunft) Die obige Methode basiert auf der
for...in
Anweisung, und diese Anweisung iteriert nur über aufzählbare Eigenschaften. Im derzeit am weitesten verbreiteten ECMAScript-Standard (3. Ausgabe) hat der Programmierer keine Möglichkeit, nicht aufzählbare Eigenschaften zu erstellen .Dies hat sich jedoch jetzt mit ECMAScript 5th Edition geändert , und wir können nicht aufzählbare, nicht beschreibbare oder nicht löschbare Eigenschaften erstellen, sodass die oben beschriebene Methode fehlschlagen kann , z.
Eine ECMAScript 5-Lösung für dieses Problem wäre:
Das
Object.getOwnPropertyNames
Methode gibt einArray
die Namen enthält alle die eigenen Eigenschaften eines Objekts, zählbare oder nicht , dieses Verfahren wird nun durch Browser - Anbieter implementiert, es ist bereits auf dem Chrome 5 Beta und die neuesten WebKit Nightly Builds.Object.defineProperty
ist auch in diesen Browsern und den neuesten Firefox 3.7 Alpha-Versionen verfügbar.quelle
hasOwnProperty
Eigenschaft überschreibt , kann die Funktion abstürzen ... Ich weiß, dass ich ein bisschen paranoid bin ... aber manchmal weiß man nicht, in welcher Umgebung Ihr Code verwendet wird, aber Sie wissen, welche Methode Sie verwenden möchten ...Object.prototype
, nicht von aufgezählt wirdfor...in
. AlsoisEmptyObject({toString:1})
wird scheitern. Dies ist einer der unglücklichen Gründe können Sie nicht ganz nutzenObject
als Allzweck-Mapping.Mit jQuery können Sie Folgendes verwenden:
Ab jQuery 1.4 überprüft diese Methode sowohl Eigenschaften des Objekts selbst als auch Eigenschaften, die von Prototypen geerbt wurden (da hasOwnProperty nicht verwendet wird).
Mit ECMAScript 5th Edition in modernen Browsern (IE9 +, FF4 +, Chrome5 +, Opera12 +, Safari5 +) können Sie die integrierte Object.keys- Methode verwenden:
Oder einfaches altes JavaScript:
quelle
Die neuesten Browser (und node.js) unterstützen Object.keys (), das ein Array mit allen Schlüsseln in Ihrem Objektliteral zurückgibt, sodass Sie Folgendes tun können:
Browserunterstützung: Firefox 4, Chrome 5, Internet Explorer 9, Opera 12, Safari 5
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
quelle
Wenn Sie underscore.js verwenden, können Sie die Funktion _.isEmpty verwenden:
quelle
_.isEmpty([]) // true
Überprüfen Sie zuerst: stackoverflow.com/a/22482737/1922747Wenn Sie bereit sind, lodash zu verwenden , können Sie die
some
Methode verwenden.Siehe dieses kleine jsbin- Beispiel
quelle
_.some([1, 2]) // true
Überprüfen Sie zuerst: stackoverflow.com/a/13356338/1922747Wenn Sie sicher sein und nach Objektprototypen suchen müssen (diese werden von bestimmten Bibliotheken hinzugefügt und sind dort nicht standardmäßig vorhanden):
quelle
Member bedeutet Member-Eigenschaft, Member-Variable, wie auch immer Sie sie nennen möchten> _>
Der obige Code gibt ALLES zurück, einschließlich toString ... Wenn Sie nur sehen möchten, ob der Prototyp des Objekts erweitert wurde:
Hinweis A: Wir prüfen, ob das Mitglied des Dummy-Objekts denselben Typ wie das Mitglied unseres Testobjekts hat. Wenn es sich um eine Erweiterung handelt, sollte der Elementtyp des Dummyobjekts "undefiniert" sein.
quelle
Einfach, funktioniert in jedem Browser und obwohl es technisch gesehen eine Schleife für alle Schlüssel des Objekts ist , durchläuft es NICHT alle ... entweder gibt es 0 und die Schleife läuft nicht oder es gibt einige und sie bricht nach der ersten eins (weil wir nur prüfen, ob es JEDEN gibt ... warum also weitermachen?)
quelle
Sehr späte Antwort, aber so könnten Sie mit Prototypen umgehen.
quelle
Wenn Sie sicher sind, dass das Objekt benutzerdefiniert ist, können Sie am einfachsten feststellen, ob UDO leer ist: Der folgende Code:
Obwohl diese Methode (von Natur aus) deduktiv ist, ist sie die schnellste und schnellste.
ps :! nicht für browserdefinierte Objekte verwenden.
quelle
Späte Antwort, aber einige Frameworks behandeln Objekte als Aufzählungen. Daher kann bob.js dies folgendermaßen tun:
quelle
Sie können Folgendes verwenden:
Doppelknall !! Immobiliensuche
hasOwnProperty Dies ist etwas, das ich verwendet habe:
JavaScript hat jedoch beschlossen, den Namen der Methode nicht zu schützen, damit er manipuliert werden kann.
Requisite in myObject
Art der
Es wird jedoch nicht nach null gesucht.
Ich denke, das ist der beste Weg.
im Betreiber
Ergebnis:
Hier ist ein Link, der detaillierter auf den Operator in eingeht: Feststellen, ob eine Objekteigenschaft vorhanden ist
quelle
ES6- Funktion
Beispiele:
quelle
Wie wäre es damit?
quelle