Die Wirkung der Zuweisung in JavaScript
Wirkungen von Auswertungen
Eine Auswertung kann auch eine Wirkung haben.
Das Wort „Wirkung“ bedeutet hier das, was es auch sonst in der normalen deutschen Sprache bedeutet: eine Veränderung (eine Veränderung eines Zustandes).
Die Betrachtung solcher Wirkungen ist das Neue in diesem Kapitel des Kurses.
Wir beginnen unsere Beschäftigung mit Wirkungen mit der Zuweisung, weil eine Auswertung eines Zuweisungsausdrucks eine Wirkung hat, diese Wirkung wird im nächsten Abschnitt beschrieben.
Wirkungen einer Zuweisungsauswertung
Die Auswertung einer Zuweisung verändert den Computer so, daß eine direkt darauf folgende Auswertung des Bezeichners der Zuweisung den Wert des Ausdrucks rechts vom Gleichheitszeichen ergibt.
Eine Wirkung einer Auswertung besteht darin, daß sie etwas in der Welt verändert und/oder eine andere, spätere Auswertung beeinflußt.
Beispiel
Das folgende Beispiel wurde schon früher gezeigt.
- Auswertung
( a = 3 + 4 )- 2
5
Wir zeigen hier nun aber zusätzlich den Wert des Bezeichners »a« nach der Zuweisung.
- Auswertung
a
7
Der Wert von »a« wurde durch die Auswertung von »a = 3 + 4« auf »7« gesetzt. Dies ist eine Wirkung der Auswertung.
Beispiel
Wir können eine Zuweisung verwenden, um uns etwas zu merken.
- Auswertung
a = 'Brot kaufen!'
"Brot kaufen!"
Später kann die Information dann wieder unter dem verwendeten Namen abgerufen werden.
- Auswertung
a
"Brot kaufen!"
Man sieht, daß durch die erneute Zuweisung der vorherige Wert von »a« (»7«) verloren ging.
Umbindungen
Bei einer erneuten Bindung an einen Bezeichner, der schon an einen Wert gebunden ist, wird die bisherige Bindung durch eine neue Bindung ersetzt.
- Protokoll
x = 2
2
x = 'Ich war eine 2.'
"Ich war eine 2."
x
"Ich war eine 2."
Der Bezeichner »x« war zunächst an den Wert «2» gebunden. Nach der Auswertung des Ausdrucks »x = 'Ich war eine 2.'« ist er aber nun an den Wert «'Ich war eine 2.'» gebunden.
Sprechweise
Eine Zuweisung mit einer bestimmten linken Seite wird auch als eine Zuweisung an jene linke Seite bezeichnet. So ist beispielsweise die Zuweisung »a = 2« eine Zuweisung an »a«.
Einträge im Hauptverzeichnis
Anlegen neuer Einträge
Wenn ein Wert an einen Bezeichner zugewiesen wird, dem bisher noch kein Wert zugewiesen wurde, wird ein neuer Eintrag im globalen Verzeichnis »this« mit jenem Bezeichner als Schlüssel angelegt.
- Auswertung
"b" in this
false
- Auswertung
b = 2
2
- Auswertung
"b" in this
true
- Auswertung
b
2
- Auswertung
this.b
2
Genauso ist es aber auch möglich, den Eintrag bei der Zuweisug ausdrücklich mit einem echten Eintragsausdruck anzugeben.
- Auswertung
this.c = 3
3
Eine spätere Verwendung des Eintrags kann mit oder ohne Qualifikation erfolgen.
- Auswertung
this.c
3
- Auswertung
c
3
Veränderung vorhandener Einträge
Falls ein Bezeichner schon im Hauptverzeichnis enthalten ist, und eine Zuweisung an ihn erfolgt, wird sein bisheriger Wert durch den neuen Wert ersetzt.
- Auswertung
"a" in this
true
- Auswertung
this.a
2
- Auswertung
a = 4
4
- Auswertung
a
4
- Auswertung
this.a
4
Die Tatsache, daß wir unsere Einträge im Hauptverzeichnis anlegen, ist auch die Erklärung dafür, daß eingangs empfohlen wurde, Namen mit weniger als drei Zeichen zu verwenden. Da es keine vordefinierten Namen mit weniger als drei Zeichen gibt, sind so keine Namensgleichheiten mit bereits vordefinierten Namen aus dem Hauptverzeichnis möglich, die sonst eventuell zu Störungen führen könnten.
- »this« als Sammlung von Paaren aus Schlüsseln und Bindungen
.-------------------------------------.
| this |
| ---- |
|-------------------------------------|
| Schluessel | Bindung |
|------------|------------------------|
| a | Eintrag mit dem Wert 2 |
|------------|------------------------|
| b | Eintrag mit dem Wert 7 |
'-------------------------------------'
Einträge in anderen Verzeichnissen
Wir können aber auch zu anderen Verzeichnissen Einträge hinzufügen, indem wir die entsprechende Qualifikation verwenden.
Das folgende Beispiel zeigt, wie ein Eintrag zum Verzeichnis »this.Math« hinzugefügt wird.
- Auswertung
this.Math.a = 5
5
- Auswertung
this.Math.a
5
Groß- und Kleinschreibung ist in JavaScript signifikant. Dies hat zur Folge, daß der Wert von »Math.PI« im allgemeinen nicht erscheint, falls »Math.pi« ausgewertet wird.
- Auswertung
Math.pi
undefined
Falls jemand »PI« lieber klein schreiben möchte, so kann er aber nun den Wert von »Math.PI« einfach nach »Math.pi« kopieren.
- Auswertung
Math.pi = Math.PI
3.141592653589793
Nun kann auch »Math.pi« mit der Bedeutung von »Math.PI« verwendet werden.
- Auswertung
Math.pi
3.141592653589793
- »Math« als Sammlung von Paaren aus Schlüsseln und Bindungen
.-----------------------------------------------------.
| Math |
| ---- |
|-----------------------------------------------------|
| Schluessel | Bindung |
|------------|----------------------------------------|
| PI | Eintrag mit dem Wert 3.141592653589793 |
|------------|----------------------------------------|
| pi | Eintrag mit dem Wert 3.141592653589793 |
'-----------------------------------------------------'
Syntax
Wir haben nun gesehen, daß auf der linken Seite eines Gleichheitszeichens an Stelle eines Bezeichners auch ein Eintragsausdruck vorkommen kann, und passen unser Syntaxdiagramm entsprechend an.
- Zuweisung (Syntaxdiagramm)
Ausdruck
.------------------. .-. .----------.
--->| Eintragsausdruck |--->( = )--->| Ausdruck |--->
'------------------' '-' '----------'
Einträge
Die Bedeutung eines Eintragsausdrucks unterscheidet sich in Abhängigkeit vom Ort seiner Verwendung.
Links vom Gleichheitszeichen
Wenn der Eintragsname in einer Zuweisung auf der linken Seite des Gleichheitszeichens vorkommt, dann legt er fest, wohin der Wert des Ausdrucks der rechten Seite geschrieben werden soll.
Sonst
Wenn der Eintragsname nicht in einer Zuweisung auf der linken Seite des Gleichheitszeichens vorkommt, dann sprechen wir von einer Verwendung des Eintragsnamens. Bei einer Verwendung ist der Wert des Eintragsausdrucks der Wert, welcher zuletzt erfolgreich in den Eintrag geschrieben wurde.
Falls ein Eintrag mit dem angegebenen Namen nicht im angegeben Verzeichnis enthalten ist („nicht existiert“), dann führt die Verwendung eines Bezeichners zu einem Fehler, während die Verwendung eines echten Eintragsausdrucks den Wert »undefined« ergibt.
- Auswertung
c
ReferenceError: c is not defined
- Auswertung
this.c
undefined
- Auswertung
this.Math.c
undefined
»undefined«
Wenn ein Eintrag nicht existiert, so ergeben Ausdrücke für seinen Wert manchmal den Wert »undefined«.
- Auswertung
this.x
undefined
Man kann einem Eintrag auch den Wert »undefined« zuweisen. Dadurch wird der Eintrag angelegt (er existiert nun), und er enthält dann den Wert »undefined«.
- Auswertung
this.x = undefined
undefined
Wertet man den Eintrag nun erneut aus, so kann man keinen Unterschied zu der Situation erkennen, in welcher der Eintrag noch gar nicht existierte!
- Auswertung
this.x
undefined
Eine Auswertung ohne »this.« zeigt aber, daß der Eintrag tatsächlich existiert.
- Auswertung
x
undefined
Zum Vergleich: Wird ein nicht-existenter Eintrag ohne »this.« ausgewertet, ergibt sich eine Fehlermeldung.
- Auswertung
y
ReferenceError: y is not defined
Wir können also erkennen, daß »x« existiert und den Wert »undefined« hat, während »y« gar nicht existiert.
Genauso kann auch der Operator »in« verwendet werden, um zu erkennen, ob ein Eintrag in einem Verzeichnis existiert.
- Auswertung
"z" in this
false
- Auswertung
z = undefined
undefined
- Auswertung
"z" in this
true
Es wird von einigen Autoren empfohlen, einem Eintrag nie den Wert »undefined« zuzuweisen, da dieser Wert so mißinterpretiert werden könnte, daß angenommen wird, daß der Eintrag gar nicht existiert. Diese Autoren empfehlen teilweise den Wert »undefined« nur für Prüfungen der Existenz eines Eintrags zu verwenden.
Jedoch wäre solch eine Mißinterpretation wohl eher durch noch nicht vollständig ausgebildete Programmierer möglich, da ausgebildete Programmierer ja wissen, daß der Wert »undefined« auch bei einem vorhandenen Eintrag möglich ist. Sie würden daher zur Prüfung gerade andere Mittel als die empfohlenen Vergleiche mit »undefined« einsetzen (wie etwa den Operator »in«).
Das Dollarzeichen »$«
Wir können nun auch zeigen, daß das Dollarzeichen »$« grundsätzlich als Name verwendet werden kann, auch wenn dies unter der Konsole von Firefox nicht ohne Qualifikation durch ein vorangestelltes Verzeichnis möglich ist.
- Auswertung
this.$ = 4
4
- Auswertung
this.$
4
Fast alle anderen Sonderzeichen dürfen aber nicht in Eintragsnamen verwendet werden.
Eintragstypen
Ein Eintrag hat keine eigenen Typ. Der Typ gehört vielmehr zu dem Wert, der im Eintrag enthalten ist. Eine Zuweisung kann also den Typ eines Eintrags genauso verändern wie dessen Wert.
- Auswertung
a = 3
3
- Auswertung
a
3
- Auswertung
typeof a
"number"
- Auswertung
a = true
true
- Auswertung
a
true
- Auswertung
typeof a
"boolean"
Messen/Lesen
Wenn der Wert der Auswertung eines Ausdrucks durch die Umgebung der Auswertung (wie den Speichers) beeinflußt wird, wie bei der Auswertung des Ausdrucks »a«, so bezeichnen wir diese Auswertung aus als Messen oder Lesen.
- Messen bei der Auswertung von »a«
.------------. .------------.
| Auswertung |<-----------| Umgebung |
'------------' Messen '------------'
Wirken/Schreiben
Eine Wirkung einer Auswertung eines Ausdrucks, wie bei der Auswertung des Ausdrucks »a=…«, beeinflußt die Umgebung der Auswertung (wie den Speichers), und kann auch als Schreiben bezeichnet werden.
- Wirken bei der Auswertung von »a = …«
.------------. .------------.
| Auswertung |----------->| Umgebung |
'------------' Wirken '------------'
Messen und Wirken sind die beiden Formen der Interaktion einer Auswertung mit ihrer Umgebung.
Wirkoperatoren
Wenn die Auswertung einer Anwendung eines Operators eines eine Wirkung haben (also etwas verändern) kann, nennen wir den Operator einen Wirkoperator.
Die Zuweisung ist ein Wirkoperator, da sie den Wert eines Eintrags verändern kann.
Schädliches Ersetzen wichtiger Einträge
Es ist möglich, wichtige globale Einträge durch eine Zuweisung zu verändern.
- Auswertung
this.Math.random()
0.6541786136474239
- Auswertung
this.Math = 1
1
- Auswertung
this.Math.random()
TypeError: this.Math.random is not a function
Es ist ein bekanntes Problem bei der JavaScript -Programmierung, daß es einem JavaScript -Programmierer versehentlich passieren kann, globale Einträge zu verändern, deren Veränderung zu Störungen führen kann.
In diesem Kurs gehen wir in der Regel davon aus, daß solche Veränderungen nicht vorgenommen wurde, also beispielsweise »this.Math« seine ursprüngliche Bedeutung hat.
Schreibgeschützte Einträge
Einige Einträge sind schreibgeschützt.
Durch eine Zuweisung an einen schreibgeschützten Eintrag wird der Wert des Eintrags nicht verändert, obwohl der Wert der rechten Seite der Zuweisung als Wert der Zuweisung erscheint.
- Auswertung
this.Infinity
Infinity
- Auswertung
this.Infinity = 7
7
- Auswertung
this.Infinity
Infinity
Die Funktion »Object.getOwnPropertyDescriptor« ergibt zu einem Verzeichnis und einem Eintragnamen ein Verzeichnis, das eine Beschreibung des mit dem angegebenen Namen benannten Eintrags des angegebenen Verzeichnisses durch sogenannte Attribute enthält. Das Attribut »writable« dieses Verzeichnisses ist »true«, wenn der angegebene Eintrag durch eine Zuweisung veränderbar ist.
- Auswertung
this.Object.getOwnPropertyDescriptor( this, "Math" ).writable
true
- Auswertung
this.Object.getOwnPropertyDescriptor( this, "Infinity" ).writable
false
Wir können so erkennen, daß »this.Math« ein veränderbarer Eintrag ist, »this.Infinity« aber nicht.
Wenn wir einen neuen Eintrag anlegen, so ist dieser veränderbar.
- Auswertung
e = 4
4
- Auswertung
this.Object.getOwnPropertyDescriptor( this, "e" ).writable
true
Verzeichniswertige Funktionen
Wir haben soeben mit »this.Object.getOwnPropertyDescriptor« eine Funktion kennengelernt, die ein Verzeichnis als Ergebnis liefert.
Um einen Eintrag dieses Verzeichnisses anzugeben haben wir den Funktionsaufruf als Kontext (als Teil vor dem Punkt ».«) verwendet.
Im folgenden Beispiel gibt »this.Object.getOwnPropertyDescriptor( this, "e" )« ein Verzeichnis an, und »writable« ist der Name eines Eintrags aus jenem Verzeichnis.
- Auswertung
this.Object.getOwnPropertyDescriptor( this, "e" ).writable
true
Die Auswahl eines Eintrages aus einem Verzeichnis, welches der Wert eines Aufrufes ist, ist dabei für uns neu.
Wir könnten auch das Ergebnis des Aufrufs zunächst unter einem Namen speichern, und dann den Eintrag ausdrücken:
- Auswertung
d = this.Object.getOwnPropertyDescriptor( this, "e" )
Object { value: 4, writable: true, enumerable: true, configurable: true }
- Auswertung
d.writable
true
Einer der Vorteile der Zuweisung ist es, daß komplizierte Ausdrücke, wie »this.Object.getOwnPropertyDescriptor( this, "e" ).writable«, mit ihrer Hilfe in einfacherere Ausdrücke, wie »this.Object.getOwnPropertyDescriptor( this, "e" )« und »d.writable« zerlegt werden können.
Verwendbare Namen
Da Namen mit einem oder zwei Zeichen im Hauptverzeichnis der meisten Browser oft nicht vordefiniert sind, bevorzugen wir bis auf weiteres solche kurzen Namen, um zu verhinden, daß wir versehentlich Namen ändern, die schon verwendet werden.
Übungsfragen
? Auswertungen (Beispiel)
Was ist der Wert der Auswertungen bei der folgenden Folge von Auswertungen?
- Auswertung
a = 2 + 1
- ?
Beispielantwort Hier sollte die Antwort „drei“ lauten.
- Auswertung
a
- ?
Beispielantwort Hier sollte die Antwort „drei“ lauten.
? Auswertungen
Was ist der Wert der mit einem Fragezeichen gekennzeichneten Auswertungen bei der folgenden Folge von Auswertungen?
- Auswertung
v = 2
- ?
- Auswertung
v = 0
- ?
? Auswertungen
Was ist der Wert der mit einem Fragezeichen gekennzeichneten Auswertungen bei der folgenden Folge von Auswertungen?
- Auswertung
v = 2
- ?
- Auswertung
3 +( v = 5 )
- ?
? Ausgabe vorhersagen
Geben Sie die sieben Zeichen der Zeichenfolge »2E3 + ", " + this.Math.pow( 2, 3 )« Zeichen für Zeichen an!
? Auswertungen
Was ist der Wert der mit einem Fragezeichen gekennzeichneten Auswertungen bei der folgenden Folge von Auswertungen?
- Auswertung
v = 7
- Auswertung
3 +( v = 5 - 2 )
- ?
? Auswertungen
Was ist der Wert der mit einem Fragezeichen gekennzeichneten Auswertungen bei der folgenden Folge von Auswertungen?
- Auswertung
v = 7
- Auswertung
3 +( v = v - 2 )
- ?
? Auswertungen
Was ist der Wert der mit einem Fragezeichen gekennzeichneten Auswertungen bei der folgenden Folge von Auswertungen?
Auswertung
v = 2
- Auswertung
v
- ?
- Auswertung
v = 3
- Auswertung
v
- ?
? Auswertungen
Was ist der Wert der mit einem Fragezeichen gekennzeichneten Auswertungen bei der folgenden Folge von Auswertungen?
- Auswertung
v = 1
- Auswertung
v = v
- ?
- Auswertung
v
- ?
? Auswertungen
Was ist der Wert der mit einem Fragezeichen gekennzeichneten Auswertungen bei der folgenden Folge von Auswertungen?
- Auswertung
v = 1
- Auswertung
v = 2 * v
- Auswertung
v
- ?
? Auswertungen
Was ist der Wert der mit einem Fragezeichen gekennzeichneten Auswertungen bei der folgenden Folge von Auswertungen?
- Auswertung
v = 1
- Auswertung
v = 2 * v
- Auswertung
v = 2 * v
- Auswertung
v
- ?
? Auswertungen
Was ist der Wert der mit einem Fragezeichen gekennzeichneten Auswertungen bei der folgenden Folge von Auswertungen?
- Auswertung
v = 1
- Auswertung
v
- Auswertung
v = 2 * v
- Auswertung
2 *( v = 2 * v )
- Auswertung
v
- ?
? Auswertungen
Was ist der Wert der mit einem Fragezeichen gekennzeichneten Auswertungen bei der folgenden Folge von Auswertungen?
- Auswertung
v = 2
- Auswertung
w = 7
- Auswertung
v = w
- Auswertung
v
- ?
? Auswertungen
Was ist der Wert der mit einem Fragezeichen gekennzeichneten Auswertungen bei der folgenden Folge von Auswertungen?
- Auswertung
v = 1
- Auswertung
w = 2
- Auswertung
v = v + w
- Auswertung
w = v + w
- ?
? Auswertungen
Was ist der Wert der mit einem Fragezeichen gekennzeichneten Auswertungen bei der folgenden Folge von Auswertungen?
- Auswertung
v = 2
- Auswertung
v = 3
- Auswertung
v = 4
- Auswertung
v
- ?
? Auswertungen
Was ist der Wert der mit einem Fragezeichen gekennzeichneten Auswertungen bei der folgenden Folge von Auswertungen?
- Auswertung
v = 2
- Auswertung
v + 4
- Auswertung
v
- ?
- Auswertung
v = v + 4
- Auswertung
v
- ?
- Auswertung
( v = v + 4 ) + 4
- ?
- Auswertung
v
- ?
? Auswertungen
Was ist der Wert der mit einem Fragezeichen gekennzeichneten Auswertungen bei der folgenden Folge von Auswertungen?
- Auswertung
v = 2
- Auswertung
w = 7
- Auswertung
v = w + 2 * v + 1
- Auswertung
v
- ?
Übungsaufgaben
/ Erhöhen einer Zahl ⃖
Durch welchen Quelltext wird der Wert des Eintrags ≫v≪ um 7 erhöht, wenn man einmal annimmt, daß ≫v≪ zunächst an eine Zahl zwischen «0» und «1000» gebunden ist?
Zur Kontrolle Wenn man den unveränderten Quelltext zwei Mal hintereinander kopiert, sollte der Wert von ≫v≪ sich um 14 erhöhen.
/ Vertauschen ⃗
Durch welche Eingaben werden die Werte der Einträge »x« und »y« miteinander vertauscht? (In dem Sinne, daß der eine hinterher den Wert enthält, der vorher im jeweils anderen war.)
/ Erhöhen eines Numerales ⃖
Durch welche Eingabe wird der Wert des Eintrags »v« um 7 erhöht, wenn man einmal annimmt, daß »v« ein Numerale zwischen »0« und »1000« enthält?
Hier soll angenommen werden, daß der Typ des Eintrags vor dem Erhöhen »string« ist; nach dem Erhöhen soll der Eintrag auch wieder »string« sein.
Die Zuweisung in ECMAScript (frei nach ECMA-262, June 2016) *
Wir stellen das Geschehen bei der Zuweisung hier vereinfacht dar. Dabei denken wir an eine einfache Zuweisung der Art wie sie oben behandelt wurde. Hier geht es also um Zuweisungen außerhalb von Funktionen, bei denen auf der linken Seite ein einfacher Bezeichner steht.
- Zuweisung
a = 2
Verschiede Aspekte von ECMAScript wurden hier vereinfacht und entsprechen daher oft nicht dem Wortlaut der Norm. Die genaue Formulierung kann man ja im Original nachlesen.
Die hier verwendeten Begriffe „nicht-statische Methode“ und „statische Methode“ sind wie in Java zu verstehen.
Hier angegebene Nummern von Abschnitten und Schritten beziehen sich auf ECMA-262, June 2016.
6.2.3 Referenzen
Eine Referenz »[ directory, name ]« besteht im wesentlichen aus einem Verzeichnis und einem Namen (der als Eintragsname des Verzeichnisses gedacht ist). Wir schreiben hier Referenzen mit eckigen Klammern (diese Notation ist nicht mit der Reihungsliteralnotation aus JavaScript gleichzusetzen).
12.1.6 Die Referenz auf die linke Seite
»name« ist der auf der linken Seite der Zuweisung verwendete Name, wie beispielsweise »a«.
Bei der Zuweisung wird zunächst die linke Seite ausgewertet. Dies geschieht im wesentlich mit »ResolveBinding( name )«, welches eine Referenz ergibt.
8.3.2 »ResolveBinding( name )«
»ResolveBinding« ruft im wesentlichen »GetIdentifierReference( glob, name )« auf. Dabei ist »glob« die aktuelle lexikalische Umgebung, die am Anfang der Auswertung des Skripts gemäß 15.1.10, Schritt 1 und 7 als die globale Umgebung initialisiert wurde.
8.2.1. »GetIdentifierReference( glob, name )«
»GetIdentifierReference( glob, name )« ergibt im wesentlich die Referenz »[ glob, name ]« (nach Schritt 4.a).
12.15.4 »=« – Die Zuweisung
Nachdem wir nun die Referenz »[ glob, name ]« auf die linke Seite erhalten haben, wird bei der Zuweisung (12.15.4) im wesentlichen »PutValue( [ glob, name ], newValue )« aufgerufen.
6.2.3.2 »PutValue( [ glob, name ], newValue )«
Die Wertfestlegung ruft bei den einfachen Zuweisungen wie in dieser Lektion im wesentlichen »glob.[[Set]]( [ glob, name ], newValue, glob )« auf.
9.1.9 »glob.[[Set]]( [ glob, name ], newValue, glob )«
Diese nicht-statische Methode ruft im wesentlichen die statische Hilfsmethode 9.1.9.1 »OrdinarySet( glob, [ glob, name ], newValue, glob )« aufgerufen. Diese legt bei Bedarf mit »CreateDataProperty« einen neuen Eintrag an. Dann wird der Eintrag in jedem Fall mit »glob.[[DefineOwnProperty]]( [ glob, name ], newValue )« auf den Wert »newValue« gesetzt.
9.1.6 »[[DefineOwnProperty]]( [ glob, name ], newValue, oldValue )«
Diese nicht-statische Methode ruft im wesentlichen die statische Hilfsmethode 9.1.6.1 »OrdinaryDefineOwnPropery( glob, [ glob, name ], newValue )« auf. Diese ruft im wesentlichen 9.1.6.3 »ValidateAndApplyPropertyDescriptor( glob, [ glob, name ], newValue, oldvalue )« auf. Diese legt dann tatsächlich (im Schritt 10.a.?) den neuen Wert des Eintrags als »newValue« fest, wenn »[[Configurable]]« und »[[Writeable]]« des alten Wertes dies zulassen. (Unter bestimmten Bedingungen werden einige Attribute, wie »[[Configurable]]« und »[[Enumerable]]«, vom alten Wert übernommen werden.)