Variable -> Array

Adam Wille

Erfahrenes Mitglied
Hi Leute :)

Mal ein kleines Rätsel für zwischendurch, ist hier natürlich nicht off-topic. ;)

Folgender JavaScript-Code ist gültig:
PHP:
<script type="text/javascript" language="JavaScript">
var a = [1,2,3];
var b = a;
a[0] = 99;
alert(b);
</ script>
(</ script natürlich zusammen!)

Das Meldungsfenster enhält folgenden Text "99,2,3" - verwunderlich, nicht? ;)

Wer kann mir die Lösung bringen?
'nen Ansporn, sprich Preise, kann ich leider nicht bieten, aber mal schauen wer das kennt... :)

fröhliches Versuchen,
Geist
 
Zuletzt bearbeitet:
Hmn.
Das sowas geht war mir noch nicht bekannt.
Ich finde es eher hinderlich,dass wenn man einer Variablen(b) den Wert einer anderen(a) zuweist und dann im Nachinein noch den Wert der 1 Variable(a) ändert auch die andere Variable(b) wieder aktualisiert wird,was den Inhalt angeht.

So läuft das doch,oder?
 
Nein, es ist keine Aktualisierung im Spiel, da kann ich dich beruhigen...
Denn wenn das so laufen würde, wäre das fatal, wie du später feststellen wirst. :)

Der Kniff an der Sache ist eher ein anderer, der mit der grundlegenden Sache "Variablen" zu tun hat. ;)

Geist,
weiterhin gespannt
 
Zuletzt bearbeitet:
Mh, möchte ich fast nicht glauben; aber kann schon sein, dass die beiden Programmiersprachen da unterschiedliche Arbeitsweisen haben... :)

Geist
 
Ok, also Auflösung der kleinen Geschichte ist folgenden:

JavaScript kennt beim Manipulieren von Variablen zwei verschiedene Varianten:

a)
Strings, Nummern und boole'sche Werte werden total auf die Variable übertragen, heißt der Variablencontainer nimmt tatsächlich deren Wert an.

b)
Arrays, Funktionen und Objekte werden nur von der Variable referenziert, heißt dass JavaScript keine Kopie von Arrays/Funktion/Objekt erstellt, sondern lediglich eine Referenz auf diese speichert - sich also merkt, wo der Interpreter zu suchen hat, wenn die Variable verwendet wird.

Mit
PHP:
var a = [1,2,3];
var b = a;
werden also nur zwei Referenzen auf ein und dasselbe Array erzeugt, nicht wie man vielleicht dachte das Array jeweils in den beiden Variablen gespeichert.

Wird also das Array abgeändert per
PHP:
a[0] = 99;
dann gibt auch
PHP:
alert(b);
nur das Array in seiner modifizierten Form wieder, da eine Verknüpfung dazu bestand, nicht eine Kopie darin gespeichert wurde. :)

'nen schönen Tag noch,
Geist
 

Neue Beiträge

Zurück