Hauptmenü

Untermenü

JavaScript - Arrays - Voodoo oder was?

1. Die Abschnitte

2. Himmel, Gesäß und Nähfaden

Nehmen wir mal an, wir haben irgendein Array. Nun wollen wir dessen Inhalte in eine Art temporäres Array übernehmen und dann die Werte ändern. Der mittlerweile bekannte und geübte PHP-Programmierer will es sich so einfach wie möglich machen und geht folgendermaßen vor:


mein_array    = new Array ();
mein_array[0] = 'laber';
mein_array[1] = 'schwall';
mein_array[2] = 'sülz';
mein_array[3] = 'jodelblah';
tmp_array     mein_array;

Als nächstes möchte er sein "temporäres" Array um einen weiteren Eintrag ergänzen. Da er aber von den Tücken weiß, die JavaScript so mit sich bringt, gibt er das Ergebnis per alert aus.


tmp_array.push ('kräh');
alert (tmp_array);

Weil die Ausgabe stimmt, denkt sich der geübte PHP-Programmierer, alles feini feini, lehnt sich zufrieden zurück und macht nach einer kurzen Pause weiter. Kurzer Hinweis: mit push hängt man ein weiteres Element hinten an ein Array dran.

Als nächstes möchte er nun ein weiteres "temporäres" Array aus dem Original erstellen und Elemente daraus löschen. Kein Problem, folgender Code sollte dafür reichen:


tmp2_array mein_array;
tmp2_array.pop();

Zur Info: pop ist kein Schweinkram. Damit löscht man einfach nur den letzten Eintrag in einem Array. Aber auf ein Mal ist nichts mehr feini feini! Wir bekommen beim alert alle Werte des Arrays mein_array zurückgeliefert!

Die böse Überraschung

Was in des Dreiteufelsnamen (dem Erfinder von JavaScript) ist denn nun passiert? Eigentlich sollten im zweiten "temporären" Array doch nur drei Werte stehen, da ja der letzte mit pop entfernt wurde. Wäre unser geübter PHP-Programmierer weiblichen Geschlechts und wir befänden uns geistig noch im Mittelalter, so würden mit Sicherheit Rufe ertönen wie

Verbrennt sie, verbrennt sie. Hexerei! Magie! Sie hat mich meiner Manneskraft beraubt! [Quelle: Hysterische Männer mit einer geistigen Einstellung aus dem Mittelalter]

3. Logos 1, Aberglauben 0

Na ja, ob das so logisch ist, sei erst mal dahingestellt. Fakt ist aber dass in JavaScript bei solchen Anweisungen wie tmp_array = mein_array; nur eine Referenz auf das Original erzeugt wird! Alle Änderungen, von denen der geübte PHP-Programmierer glaubt, dass sie im "temporären" Array geschehen, werden doch im Original vorgenommen. Man muss sich das so vorstellen.

Klingt logisch, man muss es nur wissen. Mich selber hat diese Unkenntnis zwei oder drei Stunden gekostet, eh ich darauf gekommen bin. Aber wie kann man denn nun ein echtes "temporäres" Array erzeugen? Zum Beispiel so.


tmp_array = new Array ();
// entweder
for (i in mein_array)
{
  tmp_array[i] = mein_array[i];
}
// oder
for (i in mein_array)
{
  tmp_array.push (mein_array[i]);
}

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