Signatur
Beschreibung
Die Eigenschaft length gibt an, aus wie vielen UTF-16-Code-Einheiten ein String besteht. Bei Texten, die nur Zeichen aus der Basic Multilingual Plane enthalten (lateinische Buchstaben, Umlaute, die meisten europäischen und asiatischen Schriftzeichen), stimmt dieser Wert mit der Zahl der sichtbaren Zeichen überein. Zeichen außerhalb dieses Bereichs, etwa viele Emojis oder seltene CJK-Zeichen, werden als Surrogatpaar gespeichert und zählen deshalb doppelt.
Typische Einsatzfälle sind die Prüfung auf leere Strings, die Validierung von Eingabelängen (Passwörter, Benutzernamen), die Iteration mit Index-Schleifen und das Kürzen von Texten zusammen mit slice() oder substring(). Bei einem leeren String ist length gleich 0.
Die Eigenschaft ist schreibgeschützt: Eine Zuweisung wie str.length = 3 hat keine Wirkung, weil Strings unveränderlich sind. Im Strict Mode löst so eine Zuweisung auf einem String-Primitiv einen TypeError aus. Nach der Spezifikation beträgt die maximale Länge 253 − 1. In der Praxis setzen die Engines engere Grenzen: V8 erlaubt je nach Version etwa 229 − 24 bzw. rund 230 Code-Einheiten, Firefox etwa 230 − 2.
Rückgabewert
Beispiele
Grundlegende Längenabfrage
const wort = 'Programmierung';
const leer = '';
console.log(wort.length);
console.log(leer.length);
console.log('Größe'.length); // Umlaute und ß zählen einfach
Eingabe validieren (Benutzername)
const pruefeBenutzername = (name) => {
const bereinigt = name.trim();
if (bereinigt.length === 0) return 'Bitte einen Namen eingeben.';
if (bereinigt.length < 3) return 'Mindestens 3 Zeichen erforderlich.';
if (bereinigt.length > 20) return 'Maximal 20 Zeichen erlaubt.';
return 'OK';
};
console.log(pruefeBenutzername(' '));
console.log(pruefeBenutzername('Al'));
console.log(pruefeBenutzername('max_mustermann'));
Emojis: Code-Einheiten vs. sichtbare Zeichen
const text = 'Hi 😀';
console.log(text.length); // Surrogatpaar zählt doppelt
console.log([...text].length); // Code-Points
// Graphem-Cluster (z. B. Familien-Emoji) korrekt zählen
const familie = '👨👩👧';
const segmenter = new Intl.Segmenter('de', { granularity: 'grapheme' });
console.log(familie.length);
console.log([...segmenter.segment(familie)].length);
Text auf eine Maximallänge kürzen
const kuerzen = (text, max) =>
text.length > max ? `${text.slice(0, max - 1)}…` : text;
console.log(kuerzen('JavaScript ist vielseitig', 12));
console.log(kuerzen('Kurz', 12));
// length ist schreibgeschützt
const s = 'Hallo';
s.length = 2;
console.log(s, s.length);
// Wichtig · Fallstricke
- Keine Zeichenanzahl im Sinne des Nutzers:
lengthzählt UTF-16-Code-Einheiten. Emojis, Flaggen, Hautton-Varianten und kombinierte Zeichen (z. B.'e\u0301'für „é“) ergeben mehr als 1. Für Code-Points eignet sich[...str].length, für sichtbare ZeichenIntl.Segmentermitgranularity: 'grapheme'. - Unicode-Normalisierung:
'é'.lengthkann je nach Kodierung 1 oder 2 sein. Wer Längen vergleichen will, sollte vorherstr.normalize('NFC')anwenden. - Kein Byte-Wert: Die Größe in Bytes, etwa für Datenbankfelder oder HTTP-Header, ermittelt man mit
new TextEncoder().encode(str).length(UTF-8), in Node.js mitBuffer.byteLength(str). - Abgeschnittene Surrogatpaare:
slice()odersubstring()mit einem Index auslengthkann ein Surrogatpaar zerteilen. Das Ergebnis ist dann ein ungültiges Zeichen (\uFFFD). - Schreibgeschützt: Eine Zuweisung an
lengthwird ohne Fehlermeldung ignoriert. Im Strict Mode wird einTypeErrorausgelöst. nullundundefinedhaben keinelength. Ein Zugriff darauf löst einenTypeErroraus. Abhilfe schafft Optional Chaining:str?.length ?? 0.- Die Eigenschaft wird von allen Browsern und von Node.js unterstützt.