2010-09-24 3 views
5

Firefox verwenden, auf einer Firefox-Erweiterung arbeiten, bekomme ich ständig eine Javascript-Warnung:Javascript Verweis auf nicht definierte Eigenschaft

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

Und

:

reference to undefined property mySidebar.context.netProgress 

ich mehr Möglichkeiten zum Testen des Wertes versucht habe,

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

Und

if (!mySidebar.context.netProgress) { 

Und

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

jedoch die Fehlerkonsole in Firefox mir die Warnung auf der gleichen Zeile jedes Mal geben weiter, ist die fragliche Zeile die Zeile, die ich von oben den Code geschrieben. Die tatsächliche Überprüfung auf den Wert verursacht die Warnung.

Ich habe auch eine Warnung, um den Wert von mySidebar.context, der immer ein Objekt ist, zu überprüfen, so dass es nicht von der Eltern ist, dass ich die Warnung bekomme.

Irgendwelche Ideen?

+0

Sie können auch festlegen es nur auf 'null' bei Browser-Start. – MatrixFrog

Antwort

3

Objekt versuchen. hasOwnProperty()

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

+1, ich hoffe, es macht dir nichts aus, dass ich deinem Post ein Beispiel hinzufüge. Beachten Sie, dass dies nicht für Eigenschaften funktioniert, die über die Prototypkette übernommen wurden. –

+2

Beachten Sie, dass 'hasOwnProperty' auf die * Existenz * einer Eigenschaft prüft, die Eigenschaft könnte existieren * und * ihr Wert könnte' undefiniert' sein, siehe auch: [Unterschied zwischen undefiniert und nicht in Javascript definiert] (http://stackoverflow.com/questions/3420071/difference-between-undefined-and-not-being-defined-in-javascript/3420160#3420160) – CMS

+0

Das hat gut funktioniert, danke! – Purge

6

Wie Swingley sagte, Sie Object.prototype.hasOwnProperty() überprüfen die Existenz einer direkten Eigenschaft auf ein Objekt verwenden können. Dies funktioniert jedoch nicht für Eigenschaften, die von der Prototypkette geerbt wurden. Für beide Situationen, geerbt und direkt, können Sie die in operator verwenden:

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

Ist es nicht zu lang? Die Verwendung von if (mySidebar.context.netProgress) ist mehr und mehr praktisch ... – vitaliydev