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 reducir esto a 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 si es una "Propiedad propia" del objeto.IE8 error en la declaración de JavaScript for-in?
he puesto mi test code here:
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, estoy recibiendo:
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 cu La función stom toString siempre se omite.
¿Alguien sabe una alternativa? ¿Es esto una especie de comportamiento exclusivo del modo peculiar, o simplemente un ERROR?
Gracias por citar mi respuesta, voy a publicar alguna solución al problema en el otro hilo -y tal vez más bugs- aplicación;) Gracias – CMS
. Por lo tanto, al contrario de las especificaciones de JavaScript, este es un caso en el que una propiedad definida por el usuario no es enumerable. ¿Hay una lista de todas esas propiedades para que pueda agregar una prueba especial a mi código cuando dontEnumBug es verdadero? – mckoss
He actualizado mi código de prueba: http://startpad.googlecode.com/hg/labs/js/misc/tostring.html un trabajo en torno debe probar específicamente la presencia de propiedades con nombre: toString, toLocaleString, valueOf , constructor e isPrototypeOf, de mis pruebas de IE8. – mckoss