IE8 ошибка в операторе for-in JavaScript?

Я думаю, что обнаружил ошибку в IE (IE8) при обработке оператора for-in javascript. После нескольких часов доведения этого до небольшого примера, похоже, IE специально пропускает любое свойство с именем «toString» в цикле for-in - независимо от того, находится ли оно в прототипе или является «Собственным свойством» объекта.

Я поместил свой тестовый код сюда :

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 += "
obj.hasOwnProperty('toString') == " + obj.hasOwnProperty('toString'); o += "
countProps(obj) = " + countProps(obj); o += "
obj.toString() = " + obj.toString(); d.innerHTML = o; }

Это должно дать:

obj.hasOwnProperty('toString') == true
countProps(obj) = 1
obj.toString() = hello

, но в IE я получаю:

obj.hasOwnProperty('toString') == true
countProps(obj) = 0
obj.toString() = hello

Этот специальный регистр любого свойства, называемого 'toString' разрушает мой код, который пытается скопировать методы в Function.prototype - моя пользовательская функция toString всегда пропускается.

Кто-нибудь знает обходной путь? Это какое-то поведение только в режиме причуд или просто ОШИБКА?

9
задан Mike Causer 28 January 2014 в 00:44
поделиться