2010-09-24 33 views
5

El uso de Firefox, trabajando en una extensión de Firefox, me sale continuamente una advertencia javascript:Javascript referencia a la propiedad no definida

reference to undefined property mySidebar.context.netProgress 

He intentado varias formas de probar el valor:

if (mySidebar.context.netProgress === undefined) { 

Y

if (typeof mySidebar.context.netProgress == "undefined") { 

Y

if (!mySidebar.context.netProgress) { 

Y

if (mySidebar.context.netProgress == undefined) { 

Sin embargo, la consola de errores en Firefox sigue dándome la advertencia en la misma línea cada vez, la línea en cuestión es la línea que he publicado el código de arriba. El cheque real para el valor está causando la advertencia.

También puse una alerta para verificar el valor de mySidebar.context, que siempre es un objeto, por lo que no es del padre que recibo la advertencia.

¿Alguna idea?

+0

También puedes, simplemente Es 'null' en el arranque del navegador. – MatrixFrog

Respuesta

3

Probar objeto. hasOwnProperty()

if (mySidebar.context.hasOwnProperty("netProgress")) { 
+0

+1, espero que no te importe que agregue un ejemplo a tu publicación. Tenga en cuenta que esto no funcionará para las propiedades heredadas a través de la cadena de prototipos. –

+2

Simplemente tenga en cuenta que 'hasOwnProperty' comprueba la * existencia * de una propiedad, la propiedad podría existir * y * su valor podría ser' undefined', vea también: [Diferencia entre indefinido y no definido en Javascript] (http://stackoverflow.com/questions/3420071/difference-between-undefined-and-not-being-defined-in-javascript/3420160#3420160) – CMS

+0

Esto funcionó bien, ¡gracias! – Purge

6

Como dijo Swingley, puede utilizar Object.prototype.hasOwnProperty() para comprobar la existencia de una propiedad directa sobre un objeto. Sin embargo, esto no funcionará para las propiedades heredadas de la cadena de prototipos. Para ambas situaciones, heredado y directo, se puede utilizar el in operator:

if ("netProgress" in mySidebar.context) { 
+0

¿No es demasiado largo? Usar if (mySidebar.context.netProgress) es más Y MÁS conveniente ... – vitaliydev

Cuestiones relacionadas