|
1 | 1 | # Datentypen |
2 | 2 |
|
3 | | -Eine Variable in JavaScript kann beliebige Daten enthalten. Eine Variable kann in einem Moment eine Zeichenkette und in einem anderen eine Zahl sein: |
| 3 | +Ein Wert in JavaScript ist immer von einem bestimmten Typ. Zum Beispiel eine Zeichenfolge oder eine Zahl. |
| 4 | + |
| 5 | +Es gibt acht grundlegende Datentypen in JavaScript. Hier werden wir sie allgemein behandeln, und in den nächsten Kapiteln werden wir auf jeden von ihnen im Detail eingehen. |
| 6 | + |
| 7 | +Wir können jeden beliebigen Typ in eine Variable setzen. Zum Beispiel kann eine Variable in einem Moment eine Zeichenfolge sein und dann eine Zahl speichern: |
4 | 8 |
|
5 | 9 | ```js |
6 | 10 | // kein Fehler |
7 | 11 | let message = "Hallo"; |
8 | 12 | message = 123456; |
9 | 13 | ``` |
10 | 14 |
|
11 | | -Programmiersprachen, die solche Dinge erlauben, werden als "dynamisch typisiert" bezeichnet, was bedeutet, dass es Datentypen gibt, aber Variablen an keine von ihnen gebunden sind. |
12 | | - |
13 | | -Es gibt acht grundlegende Datentypen in JavaScript. Hier werden wir sie allgemein behandeln und in den nächsten Kapiteln detailliert auf sie eingehen. |
| 15 | +Programmiersprachen, die solche Eigenschaften ermöglichen, wie z.B. JavaScript, werden als "dynamisch typisiert" bezeichnet, d.h. es gibt zwar Datentypen, aber die Variablen sind nicht an einen dieser Typen gebunden. |
14 | 16 |
|
15 | 17 | ## Number |
16 | 18 |
|
@@ -64,21 +66,23 @@ Mehr über das Arbeiten mit Zahlen erfahren wir in diesem Kapitel <info:number>. |
64 | 66 |
|
65 | 67 | ## BigInt |
66 | 68 |
|
67 | | -In JavaScript kann der Typ "number" keine Ganzzahlwerte darstellen, die größer als <code>2<sup>53</sup></code> (oder kleiner als <code>-2<sup>53</sup></code> für Negative), sind. Das ist eine technische Einschränkung, die durch ihre interne Darstellung verursacht wird. Das sind ungefähr 16 Dezimalstellen, daher ist die Beschränkung für die meisten Zwecke kein Problem, aber manchmal benötigen wir wirklich große Zahlen, z.B. für Verschlüsselungen oder Zeitstempel mit Mikrosekundengenauigkeit. |
| 69 | +In JavaScript kann der Typ "Zahl" keine ganzzahligen Werte darstellen, die größer als <code>(2<sup>53</sup>-1)</code> (das ist `9007199254740991`) oder kleiner als <code>-(-2<sup>53</sup>-1)</code> für Negative sind. Es handelt sich um eine technische Einschränkung, die durch ihre interne Darstellung bedingt ist. |
| 70 | + |
| 71 | +Für die meisten Zwecke reicht das völlig aus, aber manchmal brauchen wir wirklich große Zahlen, z.B. für die Kryptographie oder Zeitstempel mit Mikrosekunden-Genauigkeit. |
68 | 72 |
|
69 | 73 | Der Typ `BigInt` wurde kürzlich der Sprache hinzugefügt, um Ganzzahlen beliebiger Länge darzustellen. |
70 | 74 |
|
71 | | -Ein `BigInt` wird durch Anhängen von `n` an das Ende einer Ganzzahl erstellt: |
| 75 | +Ein `BigInt`-Wert wird durch Anhängen von `n` an das Ende einer Ganzzahl erzeugt: |
72 | 76 |
|
73 | 77 | ```js |
74 | 78 | // Das "n" am Ende bedeutet, dass es ein BigInt ist |
75 | 79 | const bigInt = 1234567890123456789012345678901234567890n; |
76 | 80 | ``` |
77 | 81 |
|
78 | | -Da `BigInt`-Zahlen selten benötigt werden, haben wir ihnen ein eigenes Kapitel gewidmet <info:bigint>. |
| 82 | +Da `BigInt`-Zahlen selten benötigt werden, behandeln wir sie hier nicht, sondern widmen ihnen ein eigenes Kapitel <info:bigint>. Lies es, wenn du so große Zahlen brauchst. |
79 | 83 |
|
80 | | -```smart header="Kompatibilitätsprobleme" |
81 | | -Derzeit wird `BigInt` in Firefox und Chrome unterstützt, nicht jedoch in Safari/IE/Edge. |
| 84 | +```smart header="Compatability issues" |
| 85 | +Im Moment wird `BigInt` in Firefox/Chrome/Edge unterstützt, aber nicht in Safari/IE. |
82 | 86 | ``` |
83 | 87 |
|
84 | 88 | ## String |
@@ -163,41 +167,43 @@ In JavaScript ist `null` kein "Verweis auf ein nicht vorhandenes Objekt" oder ei |
163 | 167 |
|
164 | 168 | Es ist nur ein spezieller Wert, der "nichts", "leer" oder "Wert unbekannt" darstellt. |
165 | 169 |
|
166 | | -Der obige Code besagt, dass `age` aus irgendeinem Grund unbekannt oder leer ist. |
| 170 | +Der oben genannte Code besagt, dass `age` unbekannt ist. |
167 | 171 |
|
168 | 172 | ## Der Wert "undefined" |
169 | | - |
170 | 173 | Der spezielle Wert `undefined` steht ebenfalls abseits. Er bildet einen eigenen Typ, genau wie `null`. |
171 | 174 |
|
172 | 175 | Die Bedeutung von `undefined` ist "Wert ist nicht zugewiesen". |
173 | 176 |
|
174 | 177 | Wenn eine Variable deklariert, aber nicht zugewiesen ist, ist ihr Wert `undefined`: |
175 | 178 |
|
176 | 179 | ```js run |
177 | | -let x; |
| 180 | +let age; |
178 | 181 |
|
179 | | -alert(x); // zeigt "undefined" |
| 182 | +alert(age); // zeigt "undefined" |
180 | 183 | ``` |
181 | 184 |
|
182 | 185 | Technisch gesehen ist es möglich, jeder Variablen ein `undefined` zuzuweisen: |
183 | 186 |
|
184 | 187 | ```js run |
185 | | -let x = 123; |
| 188 | +let age = 100; |
186 | 189 |
|
187 | | -x = undefined; |
| 190 | +// change the value to undefined |
| 191 | +age = undefined; |
188 | 192 |
|
189 | | -alert(x); // "undefined" |
| 193 | +alert(age); // "undefined" |
190 | 194 | ``` |
191 | 195 |
|
192 | | -...Aber wir empfehlen das nicht. Normalerweise verwenden wir `null`, um einer Variablen einen "leeren" oder "unbekannten" Wert zuzuweisen, und `undefined`, um zu überprüfen, ob eine Variable zugewiesen wurde. |
| 196 | +...Aber wir raten davon ab, das zu tun. Normalerweise verwendet man `null`, um einer Variablen einen "leeren" oder "unbekannten" Wert zuzuweisen, während `undefined` als Standard-Anfangswert für nicht zugewiesene Werte reserviert ist. |
193 | 197 |
|
194 | 198 | ## Objekte und Symbole |
195 | 199 |
|
196 | 200 | Der Typ `object` ist etwas Besonderes. |
197 | 201 |
|
198 | | -Alle anderen Typen werden als "primitive" (skalare) Datentypen bezeichnet, da ihre Werte nur ein einzelnes Element enthalten können (sei es eine Zeichenfolge oder eine Zahl oder was auch immer). Im Gegensatz dazu werden Objekte zum Speichern von Datensammlungen und komplexeren Einheiten verwendet. Wir werden später im Kapitel <info:object> darauf eingehen, nachdem wir mehr über skalare Datentypen erfahren haben. |
| 202 | +Alle anderen Typen werden als "primitiv" bezeichnet, weil ihre Werte nur eine einzige Sache enthalten können (sei es eine Zeichenfolge oder eine Zahl oder was auch immer). Im Gegensatz dazu werden Objekte zur Speicherung von Datensammlungen und komplexeren Entitäten verwendet. |
| 203 | + |
| 204 | +Da Objekte so wichtig sind, verdienen sie besondere Aufmerksamkeit. Wir werden sie später im Kapitel <info:object> behandeln, nachdem wir mehr über Primitive erfahren haben. |
199 | 205 |
|
200 | | -Der Typ `symbol` wird verwendet, um eindeutige Bezeichner für Objekte zu erstellen. Der Vollständigkeit halber erwähnen wir es hier, aber wir werden ihn nach den Objekten untersuchen. |
| 206 | +Der Typ `symbol` wird verwendet, um eindeutige Bezeichner für Objekte zu erstellen. Wir müssen es hier der Vollständigkeit halber erwähnen, aber auch die Details aufschieben, bis wir Objekte kennen. |
201 | 207 |
|
202 | 208 | ## Der Operator typeof [#type-typeof] |
203 | 209 |
|
@@ -241,16 +247,16 @@ typeof alert // "function" (3) |
241 | 247 | Die letzten drei Zeilen bedürfen möglicherweise einer zusätzlichen Erläuterung: |
242 | 248 |
|
243 | 249 | 1. `Math` ist ein eingebautes Objekt, das mathematische Operationen liefert. Wir werden es im Kapitel <info:number> lernen. Hier dient es nur als Beispiel für ein Objekt. |
244 | | -2. Das Ergebnis von `typeof null` ist `"object"`. Das ist falsch. Es ist ein offiziell anerkannter Fehler, der aus Kompatibilitätsgründen erhalten wurde. Natürlich ist `null` kein Objekt. Es ist ein besonderer Wert mit einem eigenen Typ. Also, nochmal, es ist ein Fehler der Sprache. |
245 | | -3. Das Ergebnis von `typeof alert` ist `"function"`, da `alert` eine Funktion ist. Wir werden Funktionen in den nächsten Kapiteln untersuchen, in denen wir auch feststellen werden, dass es in JavaScript keinen speziellen "Funktionstyp" gibt. Funktionen gehören zum Objekttyp. Aber `typeof` behandelt sie anders und gibt `"function"` zurück. Das ist nicht ganz richtig, aber in der Praxis sehr nützlich. |
| 250 | +2. Das Ergebnis von `typeof null` ist `"object"`. Das ist ein offiziell anerkannter Fehler im `typeof`-Verhalten, der aus den frühen Tagen von JavaScript stammt und aus Kompatibilitätsgründen beibehalten wurde. Definitiv ist `null` kein Objekt. Es ist ein besonderer Wert mit einem eigenen Typ. |
| 251 | +3. Das Ergebnis von `typeof alert` ist `"function"`, denn `alert` ist eine Funktion. Wir werden Funktionen in den nächsten Kapiteln untersuchen, wo wir auch sehen werden, dass es keinen speziellen "Funktionstyp" in JavaScript gibt. Funktionen gehören zum Objekttyp. Aber `typeof` behandelt sie anders und gibt `"function"` zurück. Auch das stammt aus den frühen Tagen von JavaScript. Technisch gesehen ist ein solches Verhalten nicht korrekt, kann aber in der Praxis bequem sein. |
246 | 252 |
|
247 | 253 | ## Zusammenfassung |
248 | 254 |
|
249 | 255 | Es gibt 8 grundlegende Datentypen in JavaScript. |
250 | 256 |
|
251 | | -- `number` für Zahlen jeglicher Art: Ganzzahl oder Gleitkommazahl, ganze Zahlen werden begrenzt durch ±2<sup>53</sup>. |
252 | | -- `bigint` steht für ganzzahlige Zahlen beliebiger Länge. |
253 | | -- `string` für Zeichenketten. Eine String kann aus einem oder mehreren Zeichen bestehen. Es gibt keine separaten Einzelzeichen. |
| 257 | +- `number` für Zahlen jeglicher Art: Ganzzahl oder Gleitkommazahl, ganze Zahlen sind auf ±2<sup>53</sup> begrenzt. |
| 258 | +- `bigint` steht für ganze Zahlen beliebiger Länge. |
| 259 | +- `string` für Zeichenketten. Eine String kann aus null oder mehreren Zeichen bestehen. Es gibt keine separaten Einzelzeichentyp. |
254 | 260 | - `boolean` für `true`/`false`. |
255 | 261 | - `null` für unbekannte Werte -- ein eigenständiger Typ mit einem einzelnen Wert `null`. |
256 | 262 | - `undefined` für nicht zugewiesene Werte -- ein eigenständiger Typ mit einem einzelnen Wert `undefined`. |
|
0 commit comments