In JavaScript ist ein Array einfach ein Objekt, dessen Eigenschaften die Namen '0', '1', '2' usw. haben. (Es sind Strings, da Zahlen nicht als Eigenschaftennamen verwendet werden können.)
Um Array-Literale zu deklarieren, schließen Sie ihre Elemente in eckige Klammern ein:
const numbers = [1, 2, 3, 'many']
Dieses Objekt hat die fünf Eigenschaften '0', '1', '2', '3' und 'length'.
Die Eigenschaft length ist eins höher als der höchste Index, umgewandelt in eine Zahl. Der Wert von numbers.length ist also die Zahl 4.
Um auf die ersten vier Eigenschaften zuzugreifen, müssen Sie eckige Klammern verwenden: numbers['1] ist 2. Das Argument in den eckigen Klammern wird automatisch in einen String umgewandelt, sodass wir auch numbers[1] schreiben können, um uns der Illusion hinzugeben, mit einem Array in einer Sprache wie Java oder C++ zu arbeiten.
Die Elemente in einem Array müssen nicht vom selben Typ sein. Beispielsweise enthält das Array numbers drei Zahlen und einen String.
In einem Array dürfen auch einzelne Elemente fehlen:
const someNumbers = [ , 2, , 9] // Die Eigenschaften '0' und '2' fehlen
Wie bei anderen Objekten haben auch bei Arrays die nicht vorhandenen Eigenschaften wie hier someNumbers[0] und someNumbers[2] den Wert undefined.
Sie können neue Elemente hinten anhängen:
someNumbers[6] = 11 // Jetzt hat someNumbers die Länge 7
Wie bei allen Objekten können Sie auch bei einem Array, auf das eine const-Variable verweist, die Eigenschaften ändern.
Hinweis
Ein nachfolgendes Komma bedeutet nicht, dass ein Element fehlt! Beispielsweise hat [1, 2, 7, 9,] vier Elemente und 3 als höchsten Index. Wie bei Objektliteralen dienen die nachfolgenden Kommata dazu, spätere Erweiterungen zu vereinfachen:
const developers = [
'Harry Smith',
'Sally Lee',
// Hier können weitere Elemente hinzugefügt werden
]
Da Arrays Objekte sind, können Sie ihnen auch beliebig neue Eigenschaften hinzufügen:
numbers.lucky = true
Das ist zwar nicht üblich, aber gültiges JavaScript.
Bei einem Array gibt der Operator typeof den Wert 'object' zurück. Um zu prüfen, ob es sich bei diesem Objekt um ein Array handelt, müssen Sie Array.isArray(obj) aufrufen.
Wenn Sie ein Array in einen String umwandeln, werden alle Elemente zu Strings gemacht und mittels Kommata verkettet. Betrachten Sie den folgenden Ausdruck:
'' + [1, 2, 3]
Dies ergibt den String '1,2,3'.
Aus einem Array der Länge 0 wird ein leerer String.
Ebenso wie in Java gibt es in JavaScript keine Vorkehrungen für mehrdimensionale Arrays, allerdings können Sie sie mit Arrays aus Arrays simulieren:
const melancholyMagicSquare = [
[16, 3, 2, 13],
[5, 10, 11, 8],
[9, 6, 7, 12],
[4, 15, 14, 1]
]
Anschließend können Sie mit jeweils zwei Paaren eckiger Klammern auf einzelne Elemente zugreifen:
melancholyMagicSquare[1][2] // 11
In Kapitel 2 erfahren Sie, wie man auf alle Elemente eines Arrays zugreifen kann. Eine ausführliche Beschreibung aller Array-Methoden folgt in Kapitel 7.
1.15JSON
JSON (JavaScript Object Notation) ist ein schlankes Textformat für den Austausch von Objektdaten zwischen Anwendungen (unabhängig davon, ob diese Anwendungen in JavaScript geschrieben sind oder nicht). Kurz gesagt, nutzt JSON die JavaScript-Syntax für Objekt- und Array-Literale, allerdings mit den folgenden Einschränkungen:
Zulässige Werte sind Objektliterale, Array-Literale, Strings, Fließkommazahlen sowie true, false und null.
Alle Strings stehen in doppelten Anführungszeichen, nicht in einfachen.
Alle Eigenschaftennamen stehen in doppelten Anführungszeichen.
Es gibt keine nachfolgenden Kommata und es dürfen keine Elemente fehlen.
Eine formale Beschreibung der Notation finden Sie auf www.json.org
.
Das folgende Beispiel zeigt einen JSON-String:
{ "name": "Harry Smith", "age": 42, "lucky numbers": [17, 29], "lucky": false }
Die Methode JSON.stringify wandelt ein JavaScript-Objekt in einen JSON-String um. Umgekehrt analysiert JSON.parse einen JSON-String und gibt ein JavaScript-Objekt zurück. Diese beiden Methoden werden gewöhnlich bei der Kommunikation mit einem Server über HTTP eingesetzt.
Vorsicht
JSON.stringify verwirft Objekteigenschaften mit dem Wert undefined und wandelt Array-Elemente mit dem Wert undefined in null um. So ergibt beispielsweise JSON.stringify({ name: ['Harry', undefined, 'Smith'], age: undefined }) den String '{"name":["Harry",null,"Smith"]}'.
Manche Programmierer verwenden die Methode JSON.stringify zur Protokollierung. Betrachten Sie den folgenden Protokollierungsbefehl:
console.log(`harry=${harry}`)
Dadurch erhalten Sie nur die folgende nutzlose Meldung:
harry=[object Object]
Ein Aufruf von JSON.stringify kann hier Abhilfe schaffen:
console.log(`harry=${JSON.stringify(harry)}`)
Dieses Problem tritt jedoch nur bei Strings auf, die Objekte enthalten. Wenn Sie ein Objekt für sich selbst protokollieren, zeigt die Konsole es korrekt an. Eine einfache Alternative besteht darin, die Namen und Werte separat zu protokollieren:
console.log('harry=', harry, 'sally=', sally)
Noch einfacher ist es, sie in ein Objekt zu packen:
console.log({harry, sally}) // Protokolliert das Objekt { harry: { . . . }, sally: { . . . } }
1.16Destrukturierung
Die Destrukturierung bietet eine komfortable Syntax, um die Elemente eines Arrays oder die Werte eines Objekts abzurufen. Wie die anderen Themen auf mittlerem Niveau in diesem Kapitel können Sie auch dieses zunächst überspringen. In diesem Abschnitt geht es um die grundlegende Syntax. Mit den Einzelheiten beschäftigen wir uns im Anschluss.
Wenden wir uns als Erstes den Arrays zu. Angenommen, wir haben das Array pair mit zwei Elementen. Dabei können wir wie folgt auf die einzelnen Elemente