2010-09-09 11 views

Respuesta

8

Bueno, por supuesto que hay errores de implementación, la más grave que he tenido que hacer frente son en JScript, la implementación de Microsoft de la norma, por ejemplo:

Identificador de FunctionExpressions debe ser accesible sólo en el alcance interior de la propia función:

(function foo() { 
    alert(typeof foo); // "function" 
})(); 

alert(typeof foo); // should be "undefined", on IE shows "function" 

el error está presente en todas las versiones actuales de IE, que sólo se ha fijado en IE9 previstas.

Y en realidad es aún peor, se crean dos objetos de función, por ejemplo:

var foo = function bar() {}; 

if (typeof bar != 'undefined') { // the case of IE 
    alert(foo === bar); // false!!! 
} 

Otro error JScript bien conocido es el "DontEnum Bug", si un objeto en su cadena de ámbito contiene una propiedad que no es numerable (tiene el atributo { DontEnum }), si la propiedad es sombreado en otro objeto, se mantendrá como no numerable, por ejemplo:

var dontEnumBug = {toString:'foo'}.propertyIsEnumerable('toString'); 

se evaluará a false en IE, esto causa problemas cuando usin g la declaración for-in, porque las propiedades no serán visitadas.

JScript es la implementación que tiene la mayor cantidad de problemas, aunque la implementación de IE9 está mejorando mucho.

Artículo recomendado:

+1

http://stackoverflow.com/questions/3663775/object-name-same-a-function-name/ Su respuesta a esa pregunta sería una buena adición a esto. La parte FunctionStatement al menos. –

+0

Buenos ejemplos. Si usted (u otra persona) tiene más artículos destacando las diferencias de implementación de ecmascript 3 en los navegadores, envíelas :) – AlfaTeK

Cuestiones relacionadas