JavaScript für Ungeduldige. Cay Horstmann

Чтение книги онлайн.

Читать онлайн книгу JavaScript für Ungeduldige - Cay Horstmann страница 16

Автор:
Серия:
Издательство:
JavaScript für Ungeduldige - Cay Horstmann

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

style="font-size:15px;">      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 [first, second = 0] = [42]

      // Setzt first auf 42 und second auf 0, da es auf der rechten Seite kein

      // übereinstimmendes Element gibt

      let { nickname = 'None' } = harry

      // Setzt nickname auf 'None', da harry nicht über die Eigenschaft nickname

      // verfügt

      Ausdrücke für Standardwerte können auch die zuvor festgelegten Variablen enthalten:

      let { name, nickname = name } = harry

      // Sowohl name als auch nickname werden auf harry.name gesetzt

      Das folgende Beispiel zeigt eine typische Anwendung der Destrukturierung mit Standardwerten. Stellen Sie sich ein Objekt vor, das Angaben zur Verarbeitung enthält, also etwa Formatierungsanweisungen. Wenn darin eine bestimmte Eigenschaft nicht angegeben ist, soll dafür ein Standardwert verwendet werden:

      let config = { separator: '; ' }

      const { separator = ',', leftDelimiter = '[', rightDelimiter = ']' } = config

      Die Variable separator wird hier mit einem benutzerdefinierten Trennzeichen initialisiert. Da in der Konfiguration jedoch keine Begrenzungszeichen angegeben sind, werden die Standardzeichen für diesen Zweck verwendet. Mit der Destrukturierungssyntax fällt der Code viel knapper aus, als wenn Sie jede Eigenschaft einzeln nachschlagen, prüfen, ob sie definiert ist, und ggf. einen Standardwert dafür vorgeben.

      In Kapitel 3 sehen wir uns eine ähnliche Anwendung der Destrukturierung für Funktionsparameter an.

       1.18Übungen

      1 Was geschieht jeweils, wenn Sie 0 zu den Werten NaN, Infinity, false, true, null und undefined addieren? Was geschieht jeweils, wenn Sie einen leeren String mit NaN, Infinity, false, true, null und undefined verketten? Raten Sie zuerst und probieren Sie es dann aus.

      2 Was ergibt [] + [], {} + [], [] + {}, {} + {} und [] - {}? Werten Sie diese Ausdrücke einmal an der Befehlszeile aus und weisen Sie sie einmal einer Variablen zu. Vergleichen Sie die Ergebnisse und erklären Sie das Ergebnis.

      3 Wie in Java und C++ (aber anders als in Python, das sich auf viele Jahrhunderte mathematischer Erfahrung stützt) wird n % 2 zu -1 ausgewertet, wenn n ein negativer Integer ist. Untersuchen Sie das Verhalten des Operators % für negative Operanden. Berücksichtigen Sie dabei sowohl Integer als auch Fließkommazahlen.

      4 Nehmen

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