Hallo!
var Untermenue = TextBereinigen (Hauptmenue[x]);
try
{
if (eval ("typeof (Untermenue) != 'undefined'") && eval (Untermenue) instanceof Array)// Untermenue vorhanden
}
catch (err)
{
// Kein Untermenue vorhanden
}
Entschuldige bitte, aber deine Lösung ignoriert alle drei Antworten, die dir bisher gegeben wurden.
Warum verwendest du hier eval()? Es scheint mir unnötig zu sein.
`eval ("typeof (Untermenue) != 'undefined'")`{:.language-javascript} ist genau dasselbe wie `typeof Untermenue != 'undefined'`{:.language-javascript}. Nur komplexer und langsamer.
`typeof xyz != 'undefined'`{:.language-javascript} ist nur nötig, wenn du nicht weißt, ob die Variable überhaupt existiert. Da du sie aber mit dem var-Statement in der Zeile davor erzeugt hast, besteht keine Gefahr. Natürlich kann sie den Wert undefined haben, aber die Abfrage `xyz instanceof Array`{:.language-javascript} würde das abdecken.
`eval(Untermenue)`{:.language-javascript} ist sehr schlechter Programmierstil. Wenn es sich um globale Variablen handelt, wäre `window[Untermenue]`{:.language-javascript} möglich – siehe [MudGuards Posting](https://forum.selfhtml.org/?t=215261&m=1473893).
~~~javascript
var untermenüName = deineFunktion(…);
if (window[untermenüName] instanceof Array) {…} else {…}
Wenn das, was Untermenue bezeichnet, keine globale Variable ist, solltest du eine Objektstruktur (einen Hash) verwenden, wie bubble vorschlägt. Dann kannst du einfach objekt[eigenschaft]
notieren. Bitte setze dich damit mal auseinander – es ist die bestmögliche Lösung, die letztlich vieles einfacher macht.
Auch try … catch dürfte damit unnötig werden. Wenn du dir eine globale Variable über window["variablenname"] oder eine Eigenschaft einem eigenen Hash holst und den Wert mit instanceof Array
prüfst, wird niemals eine Exception geworfen. Bei fast allen Abfragen in JavaScript ist try … catch unnötig, macht die Ausführung langsamer und das Debugging schwerer. Siehe meinen Artikel Objektabfragen und Fallunterscheidungen in JavaScript.
Bitte reagiere auf die Vorschläge, die dir hier gemacht werden. Sie sollen helfen, einfachen und robusteren Code zu schreiben, sodass Umwege wie eval() und try…catch, die zurecht als schlechte Coding-Praxis angesehen werden, nicht nötig sind.
Grüße,
Mathias