Syntax-Tipps in modernem JavaScript
Dauer: 20 Minuten
- Destrukturierung
- Object shorthand
- Spread-Operator
- Optional chaining
- Nullish coalescing
Ziel: Ein paar Tipps für kompakte Syntax
Durch die ständige Weiterentwicklung von JavaScript ist die Sprache in den letzten Jahren mit nützlichen syntaktischen Feinheiten erweitert worden. Hier sollen beispielhaft einige davon kurz vorgestellt werden.
Destrukturierung
Gegeben sei folgendes Ausgangsbeispiel:
const city = {name: 'Freiburg', code: 'FR', pop: 230000};
// einzelne Zuweisung der Werte aus den Eigenschaften:
const name = city.name;
const code = city.code;
const pop = city.pop;
Wenn wie oben zu sehen, werden die Werte einzelner Eigenschaften des Objekts an verschiedene Konstanten zugewiesen.
Falls die Konstanten wie oben im Beispiel
zu sehen, die gleichen Namen haben wie die
Eigenschaften (z.B. const name = city.name
),
dann können die gewünschten Zuweisungen in
eine destrukturierende Zuweisung
zusammengefasst werden:
const city = {name: 'Freiburg', code: 'FR', pop: 230000};
// Zuweisung durch Destrukturierung
const { name, code, pop } = city;
Destrukturierung funktioniert nur dann, wenn die Namen der Konstanten oder Variablen den Namen der Eigenschaften im Objekt gleichen.
In Python heißt diese Art der Zuweisung „unpacking“.
Object shorthand
Sozusagen „umgekehrt“ zur Destrukturierung kann mit dem sogenannten object shorthand aus Konstanten oder Variablen ein Objekt auf kompakte Weise erstellt werden:
const code = "KA";
const name = "Karlsruhe";
const pop = 308000;
const cityKA = { name, code, pop };
// entspricht folgendem:
// const cityKA = {name: name, code: code, pop: pop};
console.log(cityKA.code); // --> KA
Spread-Operator
Die Syntax ...
wird spread operator genannt.
Hiermit lassen sich Arrays (und Strings) auf
vielfältige Weise verarbeiten. Dazu ein Beispiel,
das zeigt, wie alle Elemente eines Arrays in
ein anderes Array eingefügt werden können:
const list1 = [1, 2, 3];
const list2 = [...list1, 4, 5, 6];
const list3 = [-3, -2, -1, 0, ...list1, 4];
console.log(list2);
// --> [ 1, 2, 3, 4, 5, 6 ]
console.log(list3);
// --> [ -3, -2, -1, 0, 1, 2, 3, 4 ]
Mit ...list1
wird das Arrays sozusagen
„ausgebreitet“ (daher spread operator).
Weitere Möglichkeiten mit dem Spread-Operator sind hier beschrieben:
Optional chaining
Daten in Objekten können z.B. bei Zugriff
auf APIs im Web unvollständig sein. Im
folgenden Beispiel hat person2
keine Daten
zur Eigenschaft city
:
const person1 = {name: 'Bob', city: {code: 'NYC'}};
console.log(person1.city.code); // --> NYC
const person2 = {name: 'Jane'};
console.log(person2.city.code); // --> TypeError!
Beim Zugriff auf person2.city.code
wird
das Programm mit einem Laufzeitfehler beendet
(hier ein TypeError
).
Dies lässt sich einerseits z.B. mit passenden
if/else
-Konstrukten verhindern. Andererseits
kommen solche Situationen sehr häufig vor,
sodass es hierfür in JavaScript eine spezielle
Syntax gibt, die den Umgang mit „unvollständigen
Objekteigenschaften“ vereinfacht:
const person1 = {name: 'Bob', city: {code: 'NY'}};
console.log(person1?.city?.code); // --> NY
const person2 = {name: 'Jane'};
console.log(person2?.city?.code); // --> undefined
Der Operator ?.
wird „optional chaining“
(„optionale Verkettung“) genannt und bewirkt,
dass gewissermaßen auf nicht vorhandene
Eigenschaften eines Objekts zugegriffen werden
kann, indem für diese undefined
geliefert wird.
Siehe dazu auch die Beschreibung zum optional chaining bei javascript.info.
Nullish coalescing
In JavaScript kommt es recht häufig vor,
dass überprüft werden muss, ob bestimmte Werte
undefined
oder null
sind. Hier ein Beispiel,
bei dem dies mit den Parametern einer Funktion
geschieht:
function returnFirst(x,y) {
if(x !== undefined && x !== null) return x;
if(y !== undefined && y !== null) return y;
}
console.log(returnFirst(1,2)); //--> 1
console.log(returnFirst(undefined,2)); //--> 2
console.log(returnFirst(null,3)); //--> 3
Solche Situationen können mit dem Operator
??
vereinfacht werden:
function returnFirst(x,y) {
return x ?? y;
}
console.log(returnFirst(1,2)); //--> 1
console.log(returnFirst(undefined,2)); //--> 2
console.log(returnFirst(null,3)); //--> 3
??
wird als nullish coalescing bezeichnet.
Dies ist ein zweistelliger Operator, der den
ersten Operanden ergibt, wenn dieser nicht
undefined
und nicht null
ist. Ansonsten
bildet der zweite Operator das Ergebnis.
Nullish coalescing wird bei javascript.info ausführlicher erklärt.
Eine Übersicht neuer JavaScript-Features der letzten Jahre gibt es hier: https://exploringjs.com/impatient-js/ch_new-javascript-features.html