Скачать книгу

first = pair[0]

      let second = pair[1]

      Durch Destrukturierung wird daraus Folgendes:

      let [first, second] = pair

      Diese Anweisung deklariert die Variablen first und second und initialisiert sie mit pair[0] und pair[1].

      Die linke Seite der Destrukturierungszuweisung ist in Wirklichkeit gar kein Array-Literal, denn schließlich gibt es first und second noch gar nicht. Sie können sich diese linke Seite als Muster vorstellen, das angibt, wie die Variablen der rechten Seite zugewiesen werden sollen.

      Betrachten Sie nun den folgenden komplizierteren Fall. Schauen Sie sich dabei an, wie die Variablen den Array-Elementen zugeordnet werden:

      let [first, [second, third]] = [1, [2, 3]]

      // Setzt first auf 1, second auf 2 und third auf 3

      Das Array auf der rechten Seite kann länger sein als das Muster auf der linken. Die Elemente, für die es keine Entsprechung gibt, werden einfach ignoriert:

      let [first, second] = [1, 2, 3]

      Ist das Array dagegen kürzer, werden die Variablen ohne Entsprechung auf undefined gesetzt:

      let [first, second] = [1]

      // Setzt first auf 1 und second auf undefined

      Wenn die Variablen first und second bereits deklariert sind, können Sie sie mithilfe der Destrukturierung auf neue Werte setzen:

      [first, second] = [4, 5]

image

      Tipp

      Um die Werte der Variablen x und y zu vertauschen, schreiben Sie einfach Folgendes:

      [x, y] = [y, x]

      Wenn Sie die Destrukturierung für eine Zuweisung verwenden, muss die linke Seite nicht unbedingt aus Variablen bestehen. Stattdessen können Sie auch L-Werte verwenden, also Ausdrücke, die nur auf der linken Seite einer Anweisung stehen können. Die Destrukturierung im folgenden Beispiel ist daher gültig:

      [numbers[0], harry.age] = [13, 42] // Gleichwertig mit numbers[0] = 13;

      harry.age = 42

      Die Destrukturierung für Objekte erfolgt auf ähnliche Weise, allerdings verwenden Sie dabei Eigenschaftennamen statt Array-Positionen:

      let harry = { name: 'Harry', age: 42 }

      let { name: harrysName, age: harrysAge} = harry

      Dieser Code deklariert die beiden Variablen harrysName und harrysAge und initialisiert sie mit den Werten der Eigenschaften name und age des Objekts auf der rechten Seite. Denken Sie daran, dass die linke Seite kein Objektliteral ist, sondern ein Muster, das angibt, wie die Variablen der rechten Seite zugeordnet werden.

      Die Destrukturierung für Objekte ist besonders dann praktisch, wenn die Eigenschaft denselben Namen hat wie die Variable. In einem solchen Fall können Sie den Eigenschaftennamen und den Doppelpunkt weglassen. Die folgende Anweisung deklariert die beiden Variablen name und age und initialisiert sie mit den gleichnamigen Eigenschaften des Objekts auf der rechten Seite:

      let { name, age } = harry

      Das ist gleichbedeutend mit der folgenden Anweisung:

      let { name: name, age: age} = harry

      Und natürlich auch mit dieser Schreibweise:

      let name = harry.name

      let age = harry.age

image

      Vorsicht

      Wenn Sie die Objektdestrukturierung einsetzen, um vorhandene Variablen zu setzen, müssen Sie den Zuweisungsausdruck in runde Klammern einschließen:

      ({name, age} = sally)

      Anderenfalls würde der Parser die öffnende geschweifte Klammer als den Beginn einer Blockanweisung auffassen.

       1.17Destrukturierung für Fortgeschrittene

      Im vorangegangenen Abschnitt habe ich mich auf die grundlegenden Aspekte der Destrukturierungssyntax beschränkt. In diesem Abschnitt für Fortgeschrittene sehen wir uns zusätzliche Merkmale an, die zwar sehr praktisch, aber nicht so unmittelbar verständlich sind. Sie können diesen Abschnitt auch gern überspringen und später darauf zurückkommen, wenn Sie die Grundlagen gemeistert haben.

       1.17.1Mehr zum Thema Objektstrukturierung

      Es ist auch möglich, verschachtelte Objekte zu destrukturieren:

      let pat = { name: 'Pat', birthday: { day: 14, month: 3, year: 2000 } }

      let { birthday: { year: patsBirthYear } } = pat

      // Deklariert die Variable patsBirthYear und initialisiert sie mit 2000

      Denken Sie auch hier wieder daran, dass die linke Seite der zweiten Anweisung kein Objekt ist, sondern ein Muster für die Zuordnung der Variablen zur rechten Seite. Diese Anweisung ist gleichbedeutend mit:

      let patsBirthYear = pat.birthday.year

      Ebenso wie bei Objektliteralen können auch hier berechnete Eigenschaftennamen verwendet werden:

      let field = 'Age'

      let { [field.toLowerCase()]: harrysAge } = harry

      // Setzt value auf harry[field.toLowerCase()]

       1.17.2Restdeklarationen

      Bei der Destrukturierung eines Arrays können Sie alle übrig gebliebenen Elemente in einem eigenen Array erfassen. Stellen Sie dem betreffenden Variablennamen eine Ellipse (...) voran.

      numbers = [1, 7, 2, 9]

      let [first, second, ...others] = numbers

      // first ist 1, second is 7 und others ist [2, 9]

      Wenn das Array auf der rechten Seite über zu wenige Elemente verfügt, ist die Restvariable ein leeres Array:

      let [first, second, ...others] = [42]

      // first ist 42, second ist undefined und others ist []

      Restdeklarationen sind auch bei Objekten möglich:

      let { name, ...allButName } = harry

      // allButName ist { age: 42 }

      Die Variable allButName wird auf ein Objekt gesetzt, das alle Eigenschaften außer derjenigen mit dem Schlüssel name enthält.

       1.17.3Standardwerte

      Für jede Variable können Sie einen Standardwert festlegen, der verwendet wird, wenn der entsprechende Wert in dem Objekt oder Array nicht vorhanden oder undefined ist. Geben Sie dazu hinter dem Variablennamen mit einem Gleichheitszeichen den gewünschten Ausdruck an:

      let

Скачать книгу