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 += "<br/>obj.hasOwnProperty('toString') == " + obj.hasOwnProperty('toString');
o += "<br/>countProps(obj) = " + countProps(obj);
o += "<br/>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 всегда пропускается.
Кто-нибудь знает обходной путь? Это какое-то поведение только в режиме причуд - или просто ошибка?