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?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage