String in Bezeichner konvertieren
Claus Peter
- javascript
0 Joachim0 Axel Richter0 dedlfix0 Cybaer
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')
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.
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.
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')
Hat jemand eine Lösung?
Grüsse
Claus Peter
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
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
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?
- 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
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";
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