Ich habe folgenden Code:
for (i in awards) {
if (awards[i] instanceof Array === false) {
console.log(awards[i]);
httpFactory.patch(awards[i], {"read": true}, false);
}
}
Meine IDE zeigt diesen Fehler in Bezug auf den obigen Code:
Mögliche Iteration über unerwartete (benutzerdefinierte / geerbte) Mitglieder, wahrscheinlich fehlende hasOwnProperty-Prüfung
Überprüft, ob in JavaScript ungefilterte For-In-Schleifen vorhanden sind. Die Verwendung dieses Konstrukts führt zur Verarbeitung geerbter oder unerwarteter Eigenschaften. Sie müssen eigene Eigenschaften mit der Methode hasOwnProperty () filtern. Die Validierung funktioniert in JavaScript-, HTML- oder JSP-Dateien.
Können Sie näher erläutern, was mit dieser Aussage gemeint ist?
javascript
Prometheus
quelle
quelle
hasOwnProperty
Überprüfungen durch - ich frage mich, wie viele Warnungen das erzeugen würde ...Antworten:
Die IDE empfiehlt, einen Test hinzuzufügen:
if (awards.hasOwnProperty(i)) { ... }
innerhalb der
for
Schleife.Ich persönlich empfehle, dies nicht zu tun und die Warnung nach Möglichkeit zu deaktivieren. In den meisten Codes ist dies einfach nicht erforderlich, und in ES5-Code, in dem Sie einem Objekt mithilfe von sicher nicht aufzählbare Eigenschaften hinzufügen können, ist dies noch weniger erforderlich
Object.defineProperty
Die
hasOwnProperty
Überprüfung ist nur erforderlich, wenn Sie neue (aufzählbare) Eigenschaften unsicher hinzugefügt haben.Object.prototype
Die einfachste Lösung besteht darin, dies nicht zu tun .jQuery führt diesen Test nicht durch - sie dokumentieren ausdrücklich, dass jQuery
Object.prototype
beschädigt wird, wenn es nicht sicher geändert wird.quelle
Jedes Objekt in Javascript verfügt über einen Prototyp mit eigenen Eigenschaften (native / geerbte Methoden / Eigenschaften) und Eigenschaften, die direkt an das Objekt selbst angehängt sind.
Wenn Sie über ein Objekt iterieren, werden die Eigenschaften des Objekts selbst und die Eigenschaften des Prototyps des Objekts iteriert.
Um zu vermeiden, dass der Prototyp wiederholt wird , wird empfohlen, die Methode hasOwnProperty zu verwenden, die nur dann true zurückgibt , wenn das Objekt direkt über die angegebene Eigenschaft verfügt. dh nicht innerhalb des Prototyps
Beispiel
for (var k in object) { if (object.hasOwnProperty(k)) { // do your computation here. } }
Weitere Details finden Sie hier
quelle
Sie können Ihre Schleife auch umgestalten in:
const keys = Object.keys(object); for (const key of keys){ // do something with object[key]; }
quelle
Sie können auch die Warnung entfernen, die eine forEach-Schleife schreibt, um einen besser lesbaren und funktionalen Ansatz zu erhalten:
Object.keys(object).forEach(key => { // Do something with object[key] });
quelle
Sie sollten am Anfang dieser Schleife eine weitere Bedingung hinzufügen
if (awards.hasOwnProperty(i))
quelle