Claus Peter: String in Bezeichner konvertieren

Hallo,

ich habe eine Frage:

-----------------------------------------------------------
Kurzfassung:

Wie kann ich einen String in einen Bezeichner wandeln, ohne daß eine Fehlermeldung erzeugt wird, wenn die Variable nicht existiert?

eval('g_pInd')

  • funktioniert, wenn die Variable var g_pInd existiert.
  • erzeugt einen Fehler, wenn g_pInd nicht existiert

Welche andere Möglichkeit gibt es?
-----------------------------------------------------------
Der Fragestellung zugrundelieger Sachverhalt:

Zur Laufzeit möchte ich ein Javascript dynamisch nachladen. Um zu überprüfen, ob das Script (was nur Variablen enthält) geladen wurde, habe ich eine Variable (var g_pInd=1;) im zu ladenden Script als Indikator definiert.

  1. Prüfung mit typeof(g_pInd) funktioniert.
    typeof() liefert 'undefined', wenn das Script noch nicht geladen wurde. Damit bin ich aber an den fest definierten Variablennamen g_pInd gebunden.

  2. Schöner ist es, den Variablennamen an die Warte-auf-Javascript-Funktion zu übergeben. Hierzu muß der Variablenname als String übergeben werden, damit nicht bereits der Aufruf der Wartefunktion einen Fehler erzeugt:

Wait4LoadJS('g_pInd', MachWasFunktionWennGeladen);

Leider habe ich noch keinen Weg gefunden, den String in einen Bezeichner zu wandeln, ohne daß eine Fehlermeldung erzeugt wird, wenn die Variable noch nicht existiert.

Also:

eval('g_pInd')

  • funktioniert, wenn die Variable g_pInd existiert.
  • erzeugt einen Fehler, wenn g_pInd nicht existiert

Hat jemand eine Lösung?

Grüsse

Claus Peter

  1. Hi,

    Leider habe ich noch keinen Weg gefunden, den String in einen Bezeichner zu wandeln, ohne daß eine Fehlermeldung erzeugt wird, wenn die Variable noch nicht existiert.

    Aber Du bist doch mit typeof schon auf dem richtigen Weg...
       if (typeof VARNAME != "undefined") tu_was();
    oder, wenn Du einen String einsetzen willst:
       if (typeof (window["mystring"]) != "undefined") tu_was();

    Gruesse, Joachim

    --
    Am Ende wird alles gut.
    1. Hallo an Alle,

      vielen Dank für Eure zahlreichen Antworten. Ihr habt mir sehr geholfen.

      Mit "typeof(window[variable])" funktioniert es wie beschrieben.

      "variable" wird als String übergeben. Existiert eine Variable mit diesem Namen, dann liefert der obige Ausdruck die type, ansonsten 'undefined'.

      Nochmals vielen Dank

      Claus Peter

  2. Hallo,

    Zur Laufzeit möchte ich ein Javascript dynamisch nachladen. Um zu überprüfen, ob das Script (was nur Variablen enthält) geladen wurde, habe ich eine Variable (var g_pInd=1;) im zu ladenden Script als Indikator definiert.

    Die Variablen sind dann im scope von window? Also das, was man bei JavaScript global nennt?

    1. Schöner ist es, den Variablennamen an die Warte-auf-Javascript-Funktion zu übergeben. Hierzu muß der Variablenname als String übergeben werden, damit nicht bereits der Aufruf der Wartefunktion einen Fehler erzeugt:

    Den könnte man ja abfangen http://de.selfhtml.org/javascript/beispiele/fehlerbehandlung_try_catch.htm.

    Leider habe ich noch keinen Weg gefunden, den String in einen Bezeichner zu wandeln, ohne daß eine Fehlermeldung erzeugt wird, wenn die Variable noch nicht existiert.

    Wenn es globale Variablen sind, dann sind sie, wenn vorhanden, im scope window. Sie können dort als Eigenscft des window Objektes:

      
    var g_pInd=1;  
    alert(window.g_pInd);  
    alert(window["g_pInd"]);  
    
    

    angesprochen werden. Nicht vorhandene Eigenschaften geben undefined zurück, ohne einen Fehler zu generieren.

      
    test = 0;  
      
    var variable = "test1";  
      
    if (typeof(window[variable]) != "undefined") {  
     alert(window[variable]);  
    } else {  
     alert("Die Variable " + variable + " existiert nicht.");  
    }  
    
    

    viele Grüße

    Axel

  3. echo $begrüßung;

    Wait4LoadJS('g_pInd', MachWasFunktionWennGeladen);

    Hat jemand eine Lösung?

    Mir gefällt sie irgendwie nicht besonders, aber sie funktioniert ohne Fehlermeldung (im FF):

    function Wait4LoadJS(a, b, c) {
      // zum Testen, was übergeben wird
      alert(a);
      alert(typeof(a));
      alert(b);
    }

    Wait4LoadJS(typeof(g_pInd), 'g_pInd', MachWasFunktionWennGeladen);

    In a wird immer ein String übergeben, der z.B. "number", "string" oder "undefined" enthält. Anhand dessen weißt du, ob die Variable existiert oder nicht.
    Der eigentliche Name der Variablen wird als Extra-Parameter übergeben werden.

    echo "$verabschiedung $name";

  4. Hi,

    Zur Laufzeit möchte ich ein Javascript dynamisch nachladen. Um zu überprüfen, ob das Script (was nur Variablen enthält) geladen wurde, habe ich eine Variable (var g_pInd=1;) im zu ladenden Script als Indikator definiert.

    Dann definiere ihn vorher intern doch mit 0?!

    Aber typeof() ist schon genau richtig! Das einzige, was dagegen spricht ist, daß dein Script nicht mehr im Netscape Navigator 2 & Co. läuft. Wenn Du damit leben kannst ... ;-)

    Und BTW: eval wäre hier so oder so überflüssig. JS erlaubt ohnehin die Verwendung von variablen Bezeichnern:
     g_pInd="It's me!";
     myvar="g_pInd";
     alert(window[myvar]);

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!