IE8-Fehler in der for-in-JavaScript-Anweisung?
Ich glaube, ich habe einen Fehler in der IE-Behandlung (IE8) für die for-in-Javascript-Anweisung gefunden. Nachdem dies einige Stunden auf ein kleines Beispiel reduziert wurde, sieht es so aus, als würde IE jede Eigenschaft namens "toString" in einer for-in-Schleife überspringen - unabhängig davon, ob es sich um einen Prototyp oder eine "Own-Eigenschaft" des Objekts handelt.
Ich habe mein @ platzie Testcode hier:
function countProps(obj) {
var c = 0;
for (var prop in obj) {
c++;
}
return c;
}
var obj = {
toString: function() {
return "hello";
}
};
function test() {
var o = "";
var d = document.getElementById('output');
o += "<br/>obj.hasOwnProperty('toString') == " + obj.hasOwnProperty('toString');
o += "<br/>countProps(obj) = " + countProps(obj);
o += "<br/>obj.toString() = " + obj.toString();
d.innerHTML = o;
}
Dies sollte ergeben:
obj.hasOwnProperty('toString') == true
countProps(obj) = 1
obj.toString() = hello
aber im IE bekomme ich:
obj.hasOwnProperty('toString') == true
countProps(obj) = 0
obj.toString() = hello
Diese spezielle Umhüllung einer Eigenschaft namens 'toString' zerstört den Code, der versucht, Methoden in einen Function.prototype zu kopieren - meine benutzerdefinierte toString-Funktion wird immer übersprungen.
Kennt jemand einen Workaround? Ist das nur eine Art von Quirks-Mode-Verhalten - oder nur ein BUG?