Neben primitiven Datentypen wie number und string gibt es in JavaScript noch einen weiteren wichtigen Datentyp: object.
Objekte sind Sammlungen von Schlüssel-Wert-Paaren.
Du kannst sie daher genauso verwenden wie das, was in anderen Sprachen oft Map oder Wörterbuch genannt wird.
In anderen Sprachen müssen alle Werte in einer Map oft denselben Datentyp haben.
In JavaScript ist nur der Typ des Schlüssels eingeschränkt: Er muss ein string sein.
Die Werte innerhalb eines Objekts können unterschiedliche Typen haben.
Sie können primitive Typen wie Zahlen sein, aber auch Arrays, andere Objekte oder sogar Funktionen.
Das macht Objekte sehr vielseitig, sodass sie auch zentrale Elemente der objektorientierten Programmierung (OOP) in JavaScript sind.
Im Folgenden konzentrieren wir uns auf Objekte als Sammlungen oder Maps. Andere Anwendungsfälle von Objekten behandeln wir in anderen Konzepten, siehe zum Beispiel Klassen.
Ein Objekt erstellst du mit geschweiften Klammern. Du kannst auch direkt einige Einträge angeben. Dazu gibst du zuerst den Schlüssel an, gefolgt von einem Doppelpunkt und dem Wert.
const emptyObject = {};
const obj = {
favoriteNumber: 42,
greeting: 'Hello World',
useGreeting: true,
address: {
street: 'Trincomalee Highway',
city: 'Batticaloa',
},
fruits: ['melon', 'papaya'],
addNumbers: function (a, b) {
return a + b;
},
};
Das Komma nach dem letzten Eintrag ist in JavaScript optional.
Vielleicht fragst du dich, warum die Schlüssel nicht in Anführungszeichen stehen, obwohl sie Strings sein sollen. Das ist eine Kurzschreibweise. Wenn der Schlüssel den Namensregeln für einen JavaScript-Bezeichner folgt, kannst du die Anführungszeichen weglassen. Bei Schlüsseln mit Sonderzeichen im Namen musst du die übliche String-Notation verwenden.
const obj = {
'1keyStartsWithNumber': '...',
'key/with/slashes': '...',
'key-with-dashes': '...',
'key with spaces': '...',
'#&()[]{}èä樹keyWithSpecialChars': '...',
};
Es gibt zwei Möglichkeiten, den Wert für einen bestimmten Schlüssel abzurufen: die Punktnotation und die Klammernotation.
const obj = { greeting: 'hello world' };
obj.greeting;
// => hello world
obj['greeting'];
// => hello world
// Bracket notation also works with variables.
const key = 'greeting';
obj[key];
// => hello world
Die Punktnotation als Kurzschreibweise hat dieselbe Einschränkung wie das Weglassen der Anführungszeichen. Sie funktioniert nur, wenn der Schlüssel den Namensregeln für Bezeichner folgt.
Du kannst einen Wert mit dem Zuweisungsoperator = hinzufügen oder ändern.
Auch hier stehen dir die Punkt- und die Klammernotation zur Verfügung.
const obj = { greeting: 'hello world' };
obj.greeting = 'Hi there!';
obj['greeting'] = 'Welcome.';
obj.newKey1 = 'new value 1';
obj['new key 2'] = 'new value 2';
const key = 'new key 3';
obj[key] = 'new value 3';
Du kannst ein Schlüssel-Wert-Paar mit dem delete-Schlüsselwort aus einem Objekt löschen.
const obj = {
key1: 'value1',
key2: 'value2',
};
delete obj.key1;
delete obj['key2'];
Mit der Methode hasOwnProperty kannst du prüfen, ob ein bestimmter Schlüssel in einem Objekt existiert.
const obj = { greeting: 'hello world' };
obj.hasOwnProperty('greeting');
// => true
obj.hasOwnProperty('age');
// => false
Es gibt eine spezielle for...in-Schleife, um über alle Schlüssel eines Objekts zu iterieren.
const obj = {
name: 'Ali',
age: 65,
};
for (let key in obj) {
console.log(key, obj[key]);
}
// name Ali
// age 65
Um subtile Fehler zu vermeiden, solltest du immer davon ausgehen, dass die for...in-Schleife die Schlüssel in einer beliebigen Reihenfolge besucht.
Beachte außerdem, dass for...in geerbte Schlüssel in die Iteration einbezieht.
In dieser Übung implementierst du eine Möglichkeit, die Highscores für das beliebteste Spiel in deiner lokalen Spielhalle im Blick zu behalten.
Du hast 5 Funktionen zu implementieren, die sich größtenteils um die Manipulation eines Objekts drehen, das Highscores speichert.
Erstelle eine Funktion createScoreBoard, die ein Objekt erstellt, das als Bestenliste dient.
Die Schlüssel dieses Objekts sind die Namen der Spieler, die Werte sind ihre Punktzahlen.
Zu Testzwecken möchtest du direkt einen Eintrag in das Objekt aufnehmen.
Dieser anfängliche Eintrag sollte The Best Ever als Spielernamen und 1000000 als Punktzahl enthalten.
createScoreBoard();
// returns an object with one initial entry
Um einen Spieler zur Bestenliste hinzuzufügen, definiere die Funktion addPlayer.
Sie akzeptiert 3 Parameter:
Die Funktion gibt dasselbe Bestenlistenobjekt zurück, das übergeben wurde, nachdem der neue Spieler hinzugefügt wurde.
addPlayer({ 'Dave Thomas': 0 }, 'José Valim', 486373);
// => {'Dave Thomas': 0, 'José Valim': 486373}
Wenn Spieler gegen die Regeln der Spielhalle verstoßen, werden sie manuell aus der Bestenliste entfernt.
Definiere removePlayer, die 2 Parameter entgegennimmt:
Diese Funktion sollte den Eintrag für den angegebenen Spieler aus der Bestenliste entfernen und die Bestenliste anschließend zurückgeben. Wenn der Spieler von Anfang an nicht in der Bestenliste war, sollte mit der Bestenliste nichts passieren. Sie sollte unverändert zurückgegeben werden.
removePlayer({ 'Dave Thomas': 0 }, 'Dave Thomas');
// => {}
removePlayer({ 'Dave Thomas': 0 }, 'Rose Fanaras');
// => { 'Dave Thomas': 0 }
Wenn ein Spieler ein weiteres Spiel in der Spielhalle beendet, wird eine bestimmte Anzahl von Punkten zur bisherigen Punktzahl in der Bestenliste hinzugefügt.
Implementiere updateScore, die 3 Parameter entgegennimmt:
Die Funktion sollte die Bestenliste nach der Aktualisierung zurückgeben.
updateScore({ 'Freyja Ćirić': 12771008 }, 'Freyja Ćirić', 73);
// => {"Freyja Ćirić", 12771081}
Die Spielhalle führt montags eine separate Bestenliste. Am Ende des Tages erhält jeder Spieler auf dieser Bestenliste 100 zusätzliche Punkte.
Implementiere die Funktion applyMondayBonus, die eine Bestenliste entgegennimmt.
Die Funktion fügt für jeden Spieler, der auf dieser Bestenliste steht, die Bonuspunkte hinzu.
Anschließend wird die Bestenliste zurückgegeben.
const scoreBoard = {
'Dave Thomas': 44,
'Freyja Ćirić': 539,
'José Valim': 265,
};
applyMondayBonus(scoreBoard);
// => { 'Dave Thomas': 144, 'Freyja Ćirić': 639, 'José Valim': 365 }
Melde dich bei Exercism an, um JavaScript mit 37 Konzepte159 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.