# JavaScript Variablen: Umfassende Übersicht
## Variablendeklarationen
| Schlüsselwort | Gültigkeitsbereich | Neu-Zuweisung | Neu-Deklaration | Beispiel | Beschreibung |
|---------------|---------------------|---------------|-----------------|----------------------------------------------|------------------------------------------------------------------------------------|
| `var` | Funktions- oder global | ✅ | ✅ | ```javascript\nvar alter = 30;\nvar alter = 35; // erlaubt\n``` | Ältere Variablendeklaration. Kann neu zugewiesen und neu deklariert werden. |
| `let` | Block-scoped | ✅ | ❌ | ```javascript\nlet name = "Anna";\nname = "Lisa"; // erlaubt\n// let name = "Maria"; // Fehler!\n``` | Moderne Variablendeklaration. Kann neu zugewiesen, aber nicht neu deklariert werden. |
| `const` | Block-scoped | ❌ | ❌ | ```javascript\nconst PI = 3.14159;\n// PI = 3; // Fehler - keine Neuzuweisung\nconst person = { name: "Max" };\nperson.name = "Tom"; // Erlaubt (Objekteigenschaften können geändert werden)\n``` | Konstante Variable. Referenz kann nicht geändert werden (bei Objekten und Arrays können Inhalte jedoch modifiziert werden). |
## Variablentypen (Primitive und Referenztypen)
### Primitive Typen
| Typ | Beschreibung | Beispielcode |
|-------------|-------------------------------|-------------------------------------------------------------------------------------|
| `number` | Repräsentiert numerische Werte | ```javascript\nlet ganzzahl = 42;\nlet dezimalzahl = 3.14;\nlet negativ = -10;\nlet spezial = Infinity;\n``` |
| `string` | Repräsentiert Textwerte | ```javascript\nlet name = "Alice";\nlet gruss = 'Hallo';\nlet template = `Mein Name ist ${name}`;\n``` |
| `boolean` | Repräsentiert Wahrheitswerte | ```javascript\nlet istWahr = true;\nlet istFalsch = false;\nlet vergleich = 5 > 3; // true\n``` |
| `undefined` | Standardwert nicht initialisierter Variablen | ```javascript\nlet variable;\nconsole.log(variable); // undefined\n``` |
| `null` | Repräsentiert bewusst keine Objektreferenz | ```javascript\nlet leer = null;\n``` |
| `symbol` | Einzigartige und unveränderliche primitive Werte | ```javascript\nlet uniqueKey = Symbol("beschreibung");\nlet anotherKey = Symbol("beschreibung");\nconsole.log(uniqueKey === anotherKey); // false\n``` |
| `bigint` | Für sehr große Ganzzahlen | ```javascript\nlet grosseZahl = 1234567890123456789012345678901234567890n;\n``` |
### Referenztypen
| Typ | Beschreibung | Beispielcode |
|------------|-------------------------------|-------------------------------------------------------------------------------------|
| `object` | Komplexe Datenstrukturen | ```javascript\nlet person = {\n name: "Max",\n alter: 30,\n sayHello: function() {\n console.log("Hallo!");\n }\n};\n``` |
| `array` | Geordnete Sammlungen von Elementen | ```javascript\nlet zahlen = [1, 2, 3, 4, 5];\nlet gemischt = [1, "text", true, {key: "wert"}];\n``` |
| `function` | Ausführbare Codeblöcke | ```javascript\nfunction addieren(a, b) {\n return a + b;\n}\nlet multiply = (a, b) => a * b;\n``` |
## Variablen-Scope
```javascript
// Global Scope
var globalVar = "Ich bin global";
function beispielFunktion() {
// Function Scope
let functionVar = "Nur in der Funktion sichtbar";
if (true) {
// Block Scope
const blockVar = "Nur im Block sichtbar";
}
}
```
## Tipps und Best Practices
* **Verwenden Sie `const` als Standard:** Nutzen Sie `const` für Variablen, deren Wert sich nach der Initialisierung nicht ändern soll.
* **Nutzen Sie `let` für Variablen, die sich ändern:** Wenn Sie wissen, dass der Wert einer Variablen später geändert werden muss, verwenden Sie `let`.
* **Vermeiden Sie `var` in modernem JavaScript:** Aufgrund seines Funktions-Scopes und des Verhaltens bei der Neu-Deklaration kann `var` zu unerwarteten Problemen führen.
* **Verwenden Sie aussagekräftige Variablennamen:** Wählen Sie Namen, die den Zweck der Variablen klar widerspiegeln.
* **Achten Sie auf den Scope Ihrer Variablen:** Verstehen Sie, wo Ihre Variablen sichtbar und zugänglich sind, um Fehler zu vermeiden.
## Typumwandlung
### Implizite Typumwandlung (Coercion)
```javascript
let zahl = "5" + 3; // Ergebnis: "53" (string)
let summe = "5" - 3; // Ergebnis: 2 (number)
```
### Explizite Typumwandlung
```javascript
let wert = "123";
let nummer = Number(wert); // Umwandlung zu number
let text = String(nummer); // Umwandlung zu string
let bool = Boolean(wert); // Umwandlung zu boolean
```
## Type Checking
```javascript
let x = 42;
console.log(typeof x); // "number"
console.log(typeof "Hallo"); // "string"
console.log(typeof true); // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof null); // "object" (Quirk in JavaScript)
console.log(typeof {}); // "object"
console.log(typeof []); // "object"
console.log(typeof function(){}); // "function"
```
Diese Übersicht bietet Ihnen einen umfassenden Einblick in die Welt der JavaScript-Variablen, ihre Eigenschaften, Typen und Verwendung.