2010-09-24 7 views
5

En utilisant Firefox, travaillant sur une extension Firefox, je reçois toujours un avertissement javascript:javascript référence à la propriété non définie

reference to undefined property mySidebar.context.netProgress 

J'ai essayé plusieurs façons de tester la valeur:

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

Et

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

Et

if (!mySidebar.context.netProgress) { 

Et

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

Cependant la console d'erreur dans Firefox continue de me donner l'avertissement sur la même ligne à chaque fois, la ligne en question est la ligne que j'ai posté le code d'en haut. La vérification de la valeur provoque l'avertissement.

Je mets également une alerte pour vérifier la valeur de mySidebar.context, qui est toujours un objet, donc ce n'est pas du parent que j'obtiens l'avertissement.

Des idées?

+0

Vous pouvez également mettre juste à 'null' au démarrage du navigateur. – MatrixFrog

Répondre

3

Essayez l'objet. hasOwnProperty()

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

+1, j'espère que cela ne vous dérange pas d'ajouter un exemple à votre message. Notez que cela ne fonctionnera pas pour les propriétés héritées de la chaîne du prototype. –

+2

Notez simplement que 'hasOwnProperty' vérifie l '* existence * d'une propriété, la propriété pourrait exister * et * sa valeur pourrait être' undefined', voir aussi: [Différence entre indéfini et non défini en Javascript] (http://stackoverflow.com/questions/3420071/difference-between-undefined-and-not-being-defined-in-javascript/3420160#3420160) – CMS

+0

Cela a bien fonctionné, merci! – Purge

6

Comme dit Swingley, vous pouvez utiliser Object.prototype.hasOwnProperty() pour vérifier l'existence d'une propriété directe sur un objet. Cependant, cela ne fonctionnera pas pour les propriétés héritées de la chaîne prototype. Pour les deux situations, et directement hérité, vous pouvez utiliser le in operator:

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

N'est-ce pas trop long? Utiliser if (mySidebar.context.netProgress) est plus pratique et plus pratique ... – vitaliydev