Start · Sprachen · JavaScript · Referenz · String: length

String: length

Eigenschaft

Die schreibgeschützte Eigenschaft <code>length</code> gibt die Länge eines Strings in UTF-16-Code-Einheiten an, nicht in sichtbaren Zeichen.

seit JavaScript ES1 – Baseline: alle Browser Kategorie: method-property

Signatur

String.prototype.length

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

Typ
number
Beschreibung
Nicht-negative Ganzzahl mit der Anzahl der UTF-16-Code-Einheiten im String.

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
14 0 5

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'));
Bitte einen Namen eingeben. Mindestens 3 Zeichen erforderlich. OK

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);
5 4 8 1

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);
JavaScript … Kurz Hallo 5

// Wichtig · Fallstricke

  • Keine Zeichenanzahl im Sinne des Nutzers: length zä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 Zeichen Intl.Segmenter mit granularity: 'grapheme'.
  • Unicode-Normalisierung: 'é'.length kann je nach Kodierung 1 oder 2 sein. Wer Längen vergleichen will, sollte vorher str.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 mit Buffer.byteLength(str).
  • Abgeschnittene Surrogatpaare: slice() oder substring() mit einem Index aus length kann ein Surrogatpaar zerteilen. Das Ergebnis ist dann ein ungültiges Zeichen (\uFFFD).
  • Schreibgeschützt: Eine Zuweisung an length wird ohne Fehlermeldung ignoriert. Im Strict Mode wird ein TypeError ausgelöst.
  • null und undefined haben keine length. Ein Zugriff darauf löst einen TypeError aus. Abhilfe schafft Optional Chaining: str?.length ?? 0.
  • Die Eigenschaft wird von allen Browsern und von Node.js unterstützt.