2010-05-06 6 views
67

In JavaScript können Sie eine Variable deklarieren, und wenn es undefined ist, können Sie überprüfen variable == undefined; Ich weiß das, aber wie kannst du einen Wert vergleichen, den du noch nicht weißt, wenn er im Speicher ist?Wie Variablen mit undefiniert zu vergleichen, wenn ich nicht weiß, ob sie existieren?

Zum Beispiel habe ich eine Klasse, die erstellt wird, wenn der Benutzer auf eine Schaltfläche klickt. Zuvor ist die Klasse nicht definiert - sie existiert nirgends. Wie kann ich es vergleichen?

Gibt es einen Weg ohne try - catch?

Antwort

141

Der beste Weg ist, überprüfen Sie die Typ, weil undefined/null/false sind eine knifflige Sache in JS. So :

if(typeof obj !== "undefined") { 
    // obj is a valid variable, do something here. 
} 

Beachten Sie, dass typeof immer einen String zurückgibt, und keinen Fehler erzeugen, wenn die Variable überhaupt nicht existieren.

+12

machen Sie das 'if (typeof obj! ==" undefined ") {}' und es ist perfekt (beachten Sie das zweite Gleichheitszeichen) – raveren

+2

Was ist das Trick Zeug? Warum nicht nur einen direkten Vergleich vornehmen wie Timmys? – Alex

+5

Sie können jetzt einfach 'obj! == undefined' verwenden. "undefined" war früher veränderlich, wie "undefined = 1234" was zu interessanten Ergebnissen führen würde. Aber nach Ecmascript 5 ist es nicht mehr beschreibbar, also können wir die einfachere Version verwenden. http://www.Codereadability.com/how-to-check-for-un-undefined-in-javascript/ –

2
if (document.getElementById('theElement')) // do whatever after this 

Für undefinierte Dinge, die Fehler, testen Sie die Eigenschaft Name des übergeordneten Objekts statt nur den Variablennamen werfen - so statt:

if (blah) ... 

tun:

if (window.blah) ... 
-1
if (!obj) { 
    // object (not class!) doesn't exist yet 
} 
else ... 
+0

Obj kann sehr gut existieren, aber falsch oder 0 sein. – andig

+0

Regelmäßiges Objekt kann nicht nur 'false' oder' 0' sein. Es sollte Paare von 'Schlüssel -> Wert 'oder leer oder undefiniert oder null enthalten. – Thevs

+0

Das war jedoch nicht die Frage. Nur weil Sie eine Variable Obj aufrufen, kann es immer noch etwas Imho sein. – andig

1

!undefined gilt in Javascript, wenn Sie also, ob Ihre Variable oder Objekt wollen wissen, ist nicht definiert und wollen Maßnahmen ergreifen, Sie so etwas tun könnte:

if(<object or variable>) { 
    //take actions if object is not undefined 
} else { 
    //take actions if object is undefined 
} 
+0

danke für Sie Zeit, aber ich diesen Fall, wenn Sie versuchen, eine nicht deklarierte Variable zu vergleichen Sie werden eine Fehlermeldung erhalten, die besagt, dass Sie die Variable nicht deklariert haben ... also ist es unmöglich, sie zu vergleichen ... deshalb müssen Sie den Typ der Variablen in einem String-Format so umwandeln, dass sie erfolgreich verglichen wird Beispiel if (Typ myundeclaredvarible == „undefined“) // – ncubica

+0

etwas beste nahum @Rahul Panday tun bearbeitet bereits die letzte ganz cool ist nie zuvor dank :) – ncubica

32
if (obj === undefined) 
{ 
    // Create obj 
} 

Wenn Sie tun Umfangreiche JavaScript-Programmierung sollten Sie sich angewöhnen, === und! == zu verwenden, wenn Sie eine typspezifische Prüfung vornehmen möchten.

Auch wenn Sie eine ordentliche Menge an Javascript machen, empfehle ich, Code über JSLint http://www.jslint.com läuft es zunächst ein wenig drakonisch, aber die meisten der Dinge, die JSLint Sie warnt, wird schließlich wieder beißen Sie zu beißen .

+3

+1 gesehen für mit JSLint gehen und den Vergleich direkt zu undefined – Ascherer

+0

Es gibt auch jshint – Martin

+0

Was ist eins Situation, in der ein Ding, das nicht "undefiniert" ist, "== undefiniert" wäre? –

Verwandte Themen