NOTA: según ECMAScript5.1, section 15.1.1.3, window.undefined es de solo lectura.JavaScript: undefined! == undefined?
- navegadores modernos implementan esto correctamente. por ejemplo: Safari 5.1, Firefox 7, Chrome 20, etc.
- Indefinido sigue siendo modificable en: Chrome 14, ...
Cuando recientemente integré Facebook Connect con Tersus, que inicialmente recibieron el los mensajes de error Invalid Enumeration Value
y Handler already exists
al intentar llamar a las funciones de la API de Facebook.
Resultó que la causa del problema era
object.x === undefined
regresando falso cuando no hay ninguna propiedad 'x' en 'objeto'.
trabajé en torno al problema mediante la sustitución de igualdad estricta con la igualdad regular en dos funciones de Facebook:
FB.Sys.isUndefined = function(o) { return o == undefined;};
FB.Sys.containsKey = function(d, key) { return d[key] != undefined;};
Esto hizo que las cosas funcionan para mí, pero parece hacer alusión a algún tipo de colisión entre código y JavaScript de Facebook de mi propio.
¿Qué podría causar esto?
Sugerencia: Está bien documentado que undefined == null
mientras que undefined !== null
. Este no es el problema aquí. La pregunta es cómo se obtiene undefined !== undefined
.
Interesante, acabo de intentar en mi consola. 'var a = {}; a.b === undefined // true'. ¿Estás seguro de que tu 'object.x === undefined' devolviendo falso era porque no había un campo x en el objeto? –
"Según ECMAScript5.1, sección 15.1.1.3, window.undefined es de solo lectura."- Horray, porque en la versión anterior, alguien podía sobrescribir' undefined' globalmente, y todo se rompería :( – Dan