Ist es sicher, wenn Sie die Eigenschaften eines Objekts durchlaufen, diese in einer For-In-Schleife zu löschen?
Beispielsweise:
for (var key in obj) {
if (!obj.hasOwnProperty(key)) continue;
if (shouldDelete(obj[key])) {
delete obj[key];
}
}
In vielen anderen Sprachen ist es unsicher, ein Array oder Wörterbuch zu durchlaufen und darin zu löschen. Ist es in JS in Ordnung?
(Ich verwende Mozillas Spidermonkey-Laufzeit.)
javascript
loops
object
properties
Joe Shaw
quelle
quelle
Antworten:
Der ECMAScript 5.1-Standardabschnitt 12.6.4 (für For-In-Schleifen) lautet:
Ich denke, es ist klar, dass der OP-Code legal ist und wie erwartet funktioniert. Browser-Macken wirken sich im Allgemeinen auf die Iterationsreihenfolge und das Löschen von Anweisungen aus, nicht jedoch darauf, ob der OP-Code funktioniert. Im Allgemeinen ist es am besten, nur die aktuelle Eigenschaft in der Iteration zu löschen. Wenn Sie andere Eigenschaften im Objekt löschen, werden sie unvorhersehbar in die Iteration aufgenommen (falls sie bereits besucht wurden) oder nicht, obwohl dies je nach Lage.
Siehe auch:
Nichts davon wirkt sich jedoch wirklich auf den Code des OP aus.
quelle
Aus der Javascript / ECMAScript-Spezifikation (speziell 12.6.4 The for-in Statement ):
quelle