¿Error de IE8 en la declaración JavaScript for-in?
Creo que he encontrado un error en el manejo de IE (IE8) para la declaración de JavaScript for-in. Después de varias horas de resumir esto en un pequeño ejemplo, parece que IE omite específicamente cualquier propiedad llamada "toString" en un bucle for-in, independientemente de si está en un prototipo o es una "Propiedad propia" del objeto.
He colocado micódigo de prueba aquí:
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;
}
Esto debería producir:
obj.hasOwnProperty('toString') == true
countProps(obj) = 1
obj.toString() = hello
pero en IE obtengo:
obj.hasOwnProperty('toString') == true
countProps(obj) = 0
obj.toString() = hello
Esta carcasa especial de cualquier propiedad llamada 'toString' está causando estragos en mi código que intenta copiar métodos en un Function.prototype; mi función toString personalizada siempre se omite.
¿Alguien sabe una solución? ¿Es esta una especie de comportamiento solo en modo peculiar, o simplemente un ERROR?