Seit der Einführung von ECMAScript 2015 (ES6) hat sich JavaScript rasant weiterentwickelt. Jährlich bereichern neue Sprachfunktionen die Syntax und ermöglichen es Entwicklern, Code effizienter, lesbarer und wartbarer zu gestalten. Dieser umfassende Leitfaden stellt die essenziellen ES6+-Features vor, die in keinem modernen JavaScript-Projekt fehlen sollten – von den bewährten Pfeilfunktionen bis hin zu neueren Ergänzungen wie Optional Chaining und dem using-Schlüsselwort.

let & const (ES6): Block-Skoping

Block-Skoping
// const für Werte, die sich nicht ändern (die meisten Variablen)
const API_URL = "https://api.example.com";
const users = []; // Das Array ist konstant, aber sein Inhalt kann sich ändern
users.push("Alice"); // ✅ In Ordnung

// let für Werte, die sich ändern
let count = 0;
count++;

// ❌ Vermeiden Sie var – es hat Funktions-Skoping, kein Block-Skoping

Pfeilfunktionen (ES6)

Pfeilfunktionen
// Traditionelle Funktion
function add(a, b) { return a + b; }

// Pfeilfunktion
const add = (a, b) => a + b;

// Einzelner Parameter – Klammern optional
const double = n => n * 2;

// Mehrzeilig – benötigt geschweifte Klammern und explizites return
const processUser = (user) => {
  const name = user.name.trim();
  return { ...user, name };
};

// Ideal für Callbacks
const evens = numbers.filter(n => n % 2 === 0);
const names = users.map(u => u.name);

Destrukturierung (ES6)

Objekt- & Array-Destrukturierung
// Objekt-Destrukturierung
const { name, email, role = "viewer" } = user;

// Variablen umbenennen
const { name: userName, email: userEmail } = user;

// Verschachtelte Destrukturierung
const { address: { city, country } } = user;

// Array-Destrukturierung
const [first, second, ...rest] = [1, 2, 3, 4, 5];
// first = 1, second = 2, rest = [3, 4, 5]

// Variablen tauschen
let a = 1, b = 2;
[a, b] = [b, a]; // a = 2, b = 1

// Funktionsparameter
function greet({ name, age }) {
  return `Hi ${name}, you're ${age}`;
}

Spread- & Rest-Operatoren (ES6)

Spread & Rest
// Spread – Arrays/Objekte erweitern
const merged = [...arr1, ...arr2];
const copy = { ...originalObj, name: "New Name" };

// Rest – verbleibende Argumente sammeln
function sum(...numbers) {
  return numbers.reduce((a, b) => a + b, 0);
}
sum(1, 2, 3, 4); // 10

Template-Literale (ES6)

Template-Literale
const name = "Alice";
const greeting = `Hello, ${name}!`;

// Mehrzeilige Strings
const html = `
  <div class="card">
    <h2>${title}</h2>
    <p>${description}</p>
  </div>
`;

// Tagged Templates
function highlight(strings, ...values) {
  return strings.reduce((result, str, i) =>
    `${result}${str}<mark>${values[i] || ''}</mark>`, '');
}

Optional Chaining & Nullish Coalescing (ES2020)

?. und ??
// Optional Chaining – sicherer Zugriff auf verschachtelte Eigenschaften
const city = user?.address?.city;          // undefined, wenn eine null/undefined ist
const first = users?.[0]?.name;            // Array-Zugriff
const result = user?.getProfile?.();       // Methodenaufruf

// Nullish Coalescing – Standardwert NUR für null/undefined
const port = config.port ?? 3000;          // Verwendet 3000 nur, wenn port null/undefined ist
const name = user.name ?? "Anonymous";

// Vergleich mit || (fängt auch 0, "", false ab)
const count = data.count || 10;   // ⚠️ Wenn count 0 ist, gibt dies 10 zurück!
const count = data.count ?? 10;   // ✅ Gibt 10 nur zurück, wenn count null/undefined ist

Objekt-Shorthand & berechnete Eigenschaften (ES6)

Objekt-Erweiterungen
const name = "Alice";
const age = 30;

// Eigenschafts-Shorthand
const user = { name, age }; // dasselbe wie { name: name, age: age }

// Methoden-Shorthand
const api = {
  async getUser(id) { /* ... */ },
  async createUser(data) { /* ... */ },
};

// Berechnete Eigenschaftsnamen
const field = "email";
const obj = { [field]: "[email protected]" };
// { email: "[email protected]" }

Module: import/export (ES6)

ES-Module
// Benannte Exports
export const API_URL = "https://api.example.com";
export function fetchUser(id) { /* ... */ }

// Standard-Export
export default class UserService { /* ... */ }

// Benannte Imports
import { API_URL, fetchUser } from './api.js';

// Standard-Import
import UserService from './UserService.js';

// Umbenennen beim Import
import { fetchUser as getUser } from './api.js';

// Dynamischer Import (Lazy Loading)
const { Chart } = await import('./chart.js');

Weitere wichtige neue Features

  • structuredClone() (ES2022): Ermöglicht das tiefe Klonen von Objekten, ohne auf JSON.parse(JSON.stringify()) Hacks angewiesen zu sein.
  • Array.at() (ES2022): Zugriff auf Elemente vom Array-Ende, z.B. arr.at(-1) für das letzte Element.
  • Object.groupBy() (ES2024): Gruppiert Array-Elemente basierend auf einer Schlüssel-Funktion.
  • Top-level await (ES2022): Ermöglicht die Verwendung von await außerhalb von async-Funktionen in ES-Modulen.

Entdecken Sie unsere kostenlosen JavaScript-Tools

Optimieren und formatieren Sie Ihren JavaScript-Code im Handumdrehen – schnell und kostenlos.