Horst Nogajski: abfragen ob Variable existiert - Vergleich zweier Methoden :)

Beitrag lesen

Hallo ueps,
Hallo juergen,

Das es so spannend sein kann, herauszubekommen, welche Variante zur Überprüfung der Existenz einer Variablen nun von Vorteil ist, hätte ich vor dieser Aktion nicht gedacht.  ;)

Ich habe beide Varianten mal probiert, die Methode mit 'typeof undefined' im Vergleich zu der 'try + catch' Variante.

Sie funktionieren beide gut.

Ich habe 3 Variablen abgefragt, wovon die 1. existiert und einen Wert hat, die 2. nur deklariert ist, und die 3. schlichtweg fehlt. ;)

Wenn die Variable nicht existiert wird der Text ausgegeben:
'Variable existiert nicht'. (ist so ziemlich das zutreffendste *g*)

Das Gleiche gibts dann noch mal mit ArrayWerten.
(Und zum Schluß die Abfrage nach dem Array selber, nur mal so zum Test)

Die Variablen:

var MyVAR1 = 1;
     var MyVAR2;
     var MyArray = new Array();
         MyArray['value1'] = 1;
         MyArray['value2'];

Die Abfragen im Script:

für die typeof Variante:
  if(typeof MyVAR1 == 'undefined')info += "Variable existiert nicht\n\r";
  else info += MyVAR1 + "\n\r";

für die try + catch Variante:
  if(isVar('MyVAR1'))info += MyVAR1 + "\n\r";
  else info += "Variable existiert nicht\n\r";

nochmal die Funktion für try + catch:
   function isVar(varName) {
     var tempVar;
     try {
       eval("tempVar = " + varName + ";");
       return true;
     }
     catch (error) {
       return false;
     }
   }

Die Ausgabe:

<img src="http://www.nogajski.de/postings/existenzpruefung_von_variablen.jpg" border=0 alt="">

Jow, da kann man jetzt ins Philosophieren geraten  &:-|

Pro & Contras:

  • Grundsätzlich für die typeof-Methode spricht, das Sie auch rückwärtskompatibel ist (NS4 etc).

  • und sie ist natürlich kürzer, wenn man nur mal eine Variable abfragen will.

  • wenn man einen Stapel abfragen will ist das wieder anders.

  • Die typeof-Methode erkennt auch lokale Variablen innerhalb einer Funktion, und gibt diesen dann den Vorrang vor gleichnamigen globalen Variablen.
    Ob das ein Vorteil oder Nachteil ist hängt davon ab was man prüfen will ;)

  • Mit try + catch hingegen konnte ich nur globale Variablen erkennen.

  • try + catch erkennt den unterschiedlichen Status zwischen 'gar nicht da' und ohne Wert bei den Variablen (VAR2). Wobei das bei dem Array.Value3 vielleicht nicht ganz richtig ist (der existiert ja nicht, aber mit try + catch wird wohl das Array erkannt, aber kein Wert für Value3 gefunden. - oder so ähnlich :) )

  • typeof undefined ist etwas schlampig bei VAR2 und Array.Value2. Da meint es die existieren nicht. Die existieren schon, haben aber den Wert undefined (oder so ähnlich ;) ).

Wie auch immer, ... für die meisten Vorhaben sollte wohl eine der Varianten passen.

Viele Grüße,
Horst