Wird dieses For-In-Loop-Erkennungs-Snippet unerwünschte Fehlalarme erzeugen?
Wir alle wissen dasfor-in-loops auf Arrays sindabsolut böse. Trotzdem werden sie häufig verwendet und die verursachten Fehler lassen sich nur schwer nachvollziehen, insbesondere wenn sie beispielsweise aufgrund von Browserabhängigkeit auftretenindexOf
-scheiben oder so.
Also habe ich dieses einfache Snippet codiert, das einen zählbaren Getter für ein "error
"Eigenschaft aufArray.prototype
(nicht zur Verwendung in Produktionscode):
Object.defineProperty(Array.prototype, "error", {
enumerable: true,
get: function() {
if (this === Array.prototype) // that looks OK
return undefined;
if (window.confirm("Somebody who coded the site you're viewing runs through an Array with a for-in-loop.\nShame on him!\n\nDo you want to raise an Error to trace the origin?"))
throw new SyntaxError("Array traverse with for-in-loop, touching Array.prototype's 'error' property :-)");
}
});
Sie können es als greasemonkey-Skript für alle Domains hinzufügen, und auf fast jeder Site werden Warnungen angezeigt :-) Die meisten werden durch Aufrufe von verursachtjQuery.extend
mit fragwürdigen Argumenten, übrigens.
Meine Frage ist jetzt:Gibt es Situationen, die solche "falschen" Schleifen legitimieren?, oderVerursacht sonst noch etwas falsch-positive Warnungen?
Ich frage mich, wie sich dies auf die Nützlichkeit meines Codes auswirken würde.