JavaScript für Ungeduldige. Cay Horstmann
Чтение книги онлайн.
Читать онлайн книгу JavaScript für Ungeduldige - Cay Horstmann страница 14
Ein Zugriff auf eine solche Eigenschaft ist mit der Punktschreibweise nicht möglich. Verwenden Sie stattdessen eckige Klammern:
harry['favorite beer'] = 'Lager'
Solche Eigenschaftennamen sind eher unüblich, können manchmal aber durchaus praktisch sein. Stellen Sie sich beispielsweise ein Objekt vor, bei dem die Namen der Eigenschaften Dateinamen und die Werte die Inhalte dieser Dateien sind.
Vorsicht
Wenn es beim Parsen unklar ist, ob eine öffnende geschweifte Klammer ein Objektliteral oder eine Blockanweisung einleitet, wird davon ausgegangen, dass eine Blockanweisung vorliegt. Geben Sie als Beispiel Folgendes in die Browserkonsole oder Node.js ein:
{} - 1
In diesem Fall wird der leere Block ausgeführt und anschließend der Ausdruck -1 ausgewertet und angezeigt.
Bei dem folgenden Ausdruck geschieht jedoch etwas anderes:
1 - {}
Hier wird {} als ein leeres Objekt aufgefasst und in NaN umgewandelt. Anschließend wird das Ergebnis (ebenfalls NaN) angezeigt.
In der Praxis treten solche Mehrdeutigkeiten jedoch nicht auf. Wenn Sie ein Objektliteral erstellen, speichern Sie es gewöhnlich in einer Variablen, übergeben es als Argument oder geben es als Ergebnis zurück. In all diesen Fällen erwartet der Parser keinen Block.
Sollte es Ihnen jemals passieren, dass ein Objektliteral fälschlicherweise als Block geparst wird, können Sie ganz einfach Abhilfe schaffen: Schließen Sie das Objektliteral in runde Klammern ein. Ein Beispiel dafür finden Sie in Abschnitt 1.16, »Destrukturierung«.
1.14Arrays
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: