Objekteigenschaften mit for...in iterieren
Beim Durchlaufen von Objekteigenschaften mit der for...in-Schleife die Schleifenvariable propt stellt den Schlüssel der Eigenschaft dar, auf die zugegriffen wird. Es handelt sich jedoch nicht um eine integrierte Methode oder Eigenschaft für Objekte.
Die for...in-Schleife ruft sowohl Eigenschaften vom Objekt selbst als auch von seinem Prototyp geerbte Eigenschaften ab. Dies kann problematisch sein, da geerbte Eigenschaften möglicherweise nicht in die Iteration einbezogen werden sollen.
Verwendung von hasOwnProperty für eine genaue Iteration
Um dieses Problem zu umgehen, können Sie hinzufügen eine hasOwnProperty-Prüfung innerhalb der for...in-Schleife:
for (var prop in obj) { if (Object.prototype.hasOwnProperty.call(obj, prop)) { // Do stuff } }
Die hasOwnProperty-Methode Prüft, ob eine Eigenschaft direkt im Objekt definiert ist und nicht von seinem Prototyp geerbt wurde. Mithilfe dieser Prüfung können Sie geerbte Eigenschaften von der Iteration ausschließen.
hasOwnProperty vs. Aufruf über das Objekt
Alternativ können Sie hasOwnProperty über das Objekt selbst aufrufen:
if (obj.hasOwnProperty(prop)) { // Do stuff }
Dies kann jedoch fehlschlagen, wenn das Objekt ein unabhängiges Feld mit demselben Namen wie hat hasOwnProperty, wie zum Beispiel:
var obj = { foo: 42, hasOwnProperty: 'lol' }; obj.hasOwnProperty('foo'); // TypeError
Um dieses Problem zu vermeiden, ist es sicherer, stattdessen hasOwnProperty über Object.prototype aufzurufen:
Object.prototype.hasOwnProperty.call(obj, 'foo'); // True
Das obige ist der detaillierte Inhalt vonWie kann ich mit „for...in' sicher über Objekteigenschaften in JavaScript iterieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!