Hauptmenü

Untermenü

JavaScript - Arrays - Sein oder nicht sein, das ist hier die Frage

1. Die Abschnitte

2. Sicher ist sicher

Sehr oft möchte man überprüfen, ob ein entsprechendes Element in einem Array vorhanden ist. In PHP (und anderen Sprachen auch) lässt sich das ganz einfach machen mit einem:


if ($array[2]['bla']['blubb'])

In JavaScript

Was wohl? Natürlich nicht! Wie könnte es auch anders sein. Zunächst mal muss man das hier wissen. Um nicht irgendwelche Fehlermeldungen des Browsers um die Ohren gehauen zu bekommen, sollte man immer eine solche Überprüfung von Array-Elementen mit if (typeof ... != 'undefined') vornehmen.

Hinweis

Mit typeof kann man in JavaScript die Art eines Objekts herausfinden. In vielen Fällen kommt zwar nur ein schlichtes Object dabei heraus, aber das reicht für eine Existenzprüfung. Wenn ein Objekt (und somit auch ein Array-Element) dagegen nicht existiert, so wird ein undefined zurückgegeben.

Bei einfachen Beispielen funktioniert auch ein simples if (mein_array[x]), aber leider habe ich die Erfahrung gemacht, dass es bei komplexeren Beispielen zu Problemen kommt. Aber fragt mich nicht warum. Daher gewöhnt euch für diesen Fall die Prüfung mittels typeof an.

3. ABER!!!!

... leider reicht das bei Arrays (und auch anderen Elementen) oft nicht aus. Und zwar immer dann, wenn ein Objekt noch mehrere Unterobjekte mit unbekannter Tiefe hat. Man muss sich das so vorstellen. Wir haben zum Beispiel ein Formular, möglicherweise mit einem select-Feld und darin unter Umständen ein paar option-Elemente. Will man nun überprüfen, ob Letztere vorhanden sind, so knallt es bereits dann, wenn das select-Feld nicht vorhanden ist. Auf Arrays übertragen sieht das zum Beispiel so aus.


mein_array         = new Array ();
mein_array[0]      = new Array ();
mein_array[0]['A'] = 'blubb';
mein_array[0]['B'] = 'blubber';
mein_array[2]      = new Array ();
mein_array[2]['A'] = 'laber';
mein_array[2]['B'] = 'schwall';

if (mein_array[1]['A'])
{
  alert('Element 1-A vorhanden');
}

In diesem Fall bekämen wir bereits eine Fehlermeldung zu Gesicht, noch ehe wir wüssten, wie uns geschieht. Des Rätsels Lösung ist recht einfach. Zumindest für die Verhältnisse von JavaScript.

Die Lösung

Wir wollen überprüfen, ob [1]['A'] vorhanden ist. Leider gibt es ein Problem, da bereits das Element [1] nicht existiert. Also knallt es hier schon. Wenn man also nicht weiß, ob die erste Ebene vorhanden ist, so muss man zuerst die überprüfen und sich erst im Erfolgsfall an die zweite wagen. Das könnte dann so aussehen:


if (mein_array[1])
{
  alert('Element 1 vorhanden');
  if (mein_array[1]['A'])
  {
    alert('Element 1-A vorhanden');
  }
  else
  {
    alert('Element 1-A nicht vorhanden');
  }
}
else
{
  alert('Element 1 nicht vorhanden');
}

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt