JavaScript/Operatoren/Zuweisungsoperator
Mit dem Zuweisungsoperator =
können Sie einen Wert in einer Variablen speichern.
Deklaration und Zuweisung
let SinnDesLebens;
SinnDesLebens = 42;
In der ersten Anweisung wird mit dem Schlüsselwort let eine Variable SinnDesLebens
deklariert. Die zweite Anweisung besteht aus einem Ausdruck, der mit dem =
-Operator den Wert 42
in dieser Variablen speichert.
Da die Kombination von Deklaration und Zuweisung sehr häufig vorkommt, wird sie von den Deklarationsanweisungen var
, let
und const
in Form der Initialisierung zusammengefasst:
let SinnDesLebens = 42;
Inhaltsverzeichnis
Die linke Seite
Auf der linken Seite des =
-Operators kann außer einer einfachen Variablen auch eine Objekteigenschaft oder ein Array-Eintrag stehen. Es ist nicht erforderlich, dass diese Eigenschaft oder dieser Array-Index bereits belegt sind, sie werden bei Bedarf von JavaScript erzeugt.
let leben = { sinn: 0 },
sense = [];
leben.sinn = 42;
sense[42] = "life";
Die rechte Seite
Auf der rechten Seite des Zuweisungsoperators kann ein beliebiger Ausdruck stehen. JavaScript wertet diesen Ausdruck aus, und der daraus entstehende Wert wird in den Speicherplatz kopiert, der von der linken Seite bezeichnet wird.
Beachten Sie, dass Arrays und Objekte hierbei eine Sonderrolle einnehmen. Die Verwaltung dieser Wertetypen erfolgt zweistufig:
- Das eigentliche Array oder Objekt ist eine eigenständige Datenstruktur, die von JavaScript intern verwaltet wird
- Im JavaScript-Programm wird auf diese Datenstruktur lediglich verwiesen. Variablen enthalten nur die Verweis-Information. Bei einer Zuweisung wird nur der Verweis kopiert - das Array oder Objekt selbst dagegen nicht.
const array1 = [ 1, 2, 3, 4 ];
const array2 = array1;
array1[2] = 33;
console.log(array2[2]); // 33
In der ersten Zeil wird mit Hilfe eines Arrayliterals ein Array mit 4 Einträgen erzeugt und in der const-Variablen array1
gespeichert. In der Zeile 2 wird die Variable array2
deklariert und mit array1
initialisiert. Dabei wird aber nur der Verweis auf das eigentliche Array übertragen, und beide Variablen zeigen nun auf den gleichen Speicherbereich.
Das sieht man in den beiden folgenden Zeilen. Zuerst wird auf Index 2 von array1
der Wert 33 geschrieben, und dann der Wert von Index 2 von array2
ausgegeben. Die Ausgabe ist 33, nicht 3.}}}}
Das Ergebnis
Der Zuweisungsoperator ist ein Operator und hat einen Wert. Das bedeutet: bei einer Zuweisung handelt es sich um einen Ausdruck, und dieser Ausdruck kann wie ein Wert verwendet werden. Der Wert des Zuweisungsoperators ist der Wert, der zugewiesen wurde.
let SinnDesLebens;
alert(SinnDesLebens = 42);
alert(SinnDesLebens);
Beide Male wird 42 ausgegeben.
==
-Operator) zu verwechseln, ist hoch, und die Zuweisung wird schnell übersehen.Die Reihenfolge der Ausführung
Wenn JavaScript einen Zuweisungsoperator antrifft, wertet es zunächst die beiden Operanden aus, und zwar zuerst den linken, dann den rechten. Erst danach wird die eigentliche Zuweisung ausgeführt.
Das klingt banal, es erklärt aber, weshalb die Zuweisung rechtsassoziativ ist.
let a = 1, b = 2;
a = b = a+3;
In Zeile 2 wird zunächst der Teil links vom ersten =
ausgewertet, das ist ein Verweis auf die Variable a
. Es folgt der Teil rechts vom ersten =
, das ist der Zuweisungsausdruck b = a+3
. Für seine Auswertung enthält a
noch den Wert 1
aus der Initialisierung, deshalb bekommt b
den Wert 4
zugewiesen. Das Ergebnis des Teilausdrucks ist der zugewiesene Wert 4 und dieser wird nun in a
gespeichert.
wird in der zweiten Zeile zuerst die 3 an b zugewiesen, und dann das Ergebnis der Zuweisung an a. Beide Variablen bekommen also den Wert 3.
Alles klar? Dann schauen Sie sich dieses Programmstück an und überlegen Sie vor dem Weiterlesen, was es wohl ausgeben könnte. Bei dem %d
in den console.log Aufrufen handelt es sich übrigens um einen Formatierungscode, er bewirkt, dass der zweite Parameter der log-Methode an dieser Stelle als Ganzzahl eingesetzt wird.
let arr = [1,2,3];
let value = 5;
function getArray(n) {
console.log("Hier ist getArray(%d)", n);
value = n;
return arr;
}
function getValue(n) {
console.log("Hier ist getValue(%d) = %d", n, value);
return value;
}
getArray(11)[1] = getArray(12)[2] = getValue(13);
console.log(arr);
Die Funktion getArray
tut drei Dinge. Sie protokolliert ihren Aufruf, speichert ihren Parameterwert in der Variablen value
und gibt dann das Array zurück, das in der globalen Variablen arr
gespeichert ist. Die Frage „Wer macht denn so einen Unsinn?“ ist angemessen, aber oft entstehen solche Konstrukte aus gut gemeinten Optimierungen von Abläufen. „Das kann man hier doch gleich mit erledigen...“, lautet oft die Begründung.
Die Funktion getValue
gibt lediglich den Wert von value
zurück und hat im Beispiel nur den Zweck, den Zugriff auf value
zu protokollieren.
Die Anweisung getArray(11)[1] = getArray(12)[2] = getValue(1);
wird von links nach rechts ausgewertet.
-
getArray(11)
wird aufgerufen. In diesem Aufruf wirdvalue
auf 11 gesetzt, dann wirdarr
zurückgegeben. Damit bildet JavaScriptarr[1]
als Ziel des linken Zuweisungsoperators -
getArray(12)
wird aufgerufen. Diesmal wirdvalue
auf 12 gesetzt undarr
wird erneut zurückgegeben. JavaScript bildetarr[2]
als Ziel des rechten Zuweisungsoperators -
getValue(13)
wird aufgerufen und gibtvalue
zurück. Von der ursprünglichen 5 ist nur noch Bitstaub übrig. Die Funktion findet eine 12 und gibt sie zurück. - die rechte Zuweisung wird ausgeführt,
arr[2]
wird auf 12 gesetzt. - jetzt ist der rechte Operand der linken Zuweisung vollständig verarbeitet und die linke Zuweisung kann ausgeführt werden. Sie setzt
arr[1]
auf das Ergebnis der rechten Zuweisung, ebenfalls 12.
Die Ausgabe sollte in etwa so aussehen:
Hier ist getArray(11) Hier ist getArray(12) Hier ist getValue(13) = 12 (3) [1, 12, 12]
Richtig, Programmcode dieser Art ist nur für Quizaufgaben empfehlenswert.