Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

String: length

Baseline
Weitgehend verfügbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.

Die length Daten-Eigenschaft eines String-Wertes enthält die Länge des Strings in UTF-16-Code-Einheiten.

Probieren Sie es aus

const str = "Life, the universe and everything. Answer:";

console.log(`${str} ${str.length}`);
// Expected output: "Life, the universe and everything. Answer: 42"

Wert

Eine nicht-negative ganze Zahl.

Eigenschaften von String: length
Schreibbarnein
Aufzählbarnein
Konfigurierbarnein

Beschreibung

Diese Eigenschaft gibt die Anzahl der Code-Einheiten im String zurück. JavaScript verwendet UTF-16 Kodierung, bei der jedes Unicode-Zeichen als eine oder zwei Code-Einheiten kodiert werden kann. Daher kann es vorkommen, dass der von length zurückgegebene Wert nicht mit der tatsächlichen Anzahl von Unicode-Zeichen im String übereinstimmt. Für gängige Schriften wie Latein, Kyrillisch, bekannte CJK-Zeichen usw. sollte dies kein Problem darstellen, aber wenn Sie mit bestimmten Schriften wie Emojis, mathematischen Symbolen oder seltenen chinesischen Zeichen arbeiten, müssen Sie möglicherweise den Unterschied zwischen Code-Einheiten und Zeichen berücksichtigen.

Die Sprachspezifikation verlangt, dass Strings eine maximale Länge von 253 - 1 Elementen haben, was das obere Limit für präzise Ganzzahlen ist. Ein String mit dieser Länge benötigt jedoch 16384TiB Speicherplatz, was nicht in den Speicher eines realistischen Geräts passt, daher neigen Implementierungen dazu, die Schwelle zu senken, was es ermöglicht, die Länge des Strings bequem in einem 32-Bit-Ganzzahl zu speichern.

  • In V8 (verwendet von Chrome und Node) beträgt die maximale Länge 229 - 24 (~1GiB). Auf 32-Bit-Systemen beträgt die maximale Länge 228 - 16 (~512MiB).
  • In Firefox beträgt die maximale Länge 230 - 2 (~2GiB). Vor Firefox 65 betrug die maximale Länge 228 - 1 (~512MiB).
  • In Safari beträgt die maximale Länge 231 - 1 (~4GiB).

Hinweis: Alle oben angegebenen Speichergrößen gehen davon aus, dass Strings im Speicher in UTF-16-Kodierung gespeichert sind, was eine Überschätzung darstellen kann. Der tatsächlich von einem String genutzte Speicherplatz unterliegt Optimierungen der JavaScript-Engine, und alle großen Engines verwenden eine kompaktere interne Darstellung, wie z.B. Ein-Byte-Speicherung für Strings, die nur Latin-1-Zeichen enthalten.

Wenn Sie mit großen Strings in anderen Kodierungen (wie UTF-8-Dateien oder Blobs) arbeiten, beachten Sie, dass bei der Übertragung der Daten in einen JS-String die Kodierung immer zu UTF-16 wird. Die Größe des Strings kann sich von der Größe der Quelldatei unterscheiden.

js
const str1 = "a".repeat(2 ** 29 - 24); // Success
const str2 = "a".repeat(2 ** 29 - 23); // RangeError: Invalid string length

const buffer = new Uint8Array(2 ** 29 - 24).fill("a".codePointAt(0)); // This buffer is 512MiB in size
const str = new TextDecoder().decode(buffer); // This string is 1GiB in size unless optimized

Für einen leeren String ist length 0.

Die statische Eigenschaft String.length steht in keinem Zusammenhang mit der Länge von Strings. Sie ist die Arity der String Funktion (im Wesentlichen die Anzahl der formalen Parameter), die 1 beträgt.

Da length Code-Einheiten statt Zeichen zählt, können Sie, wenn Sie die Anzahl der Zeichen erhalten möchten, den String zunächst mit seinem Iterator aufteilen, der nach Zeichen iteriert:

js
function getCharacterLength(str) {
  // The string iterator that is used here iterates over characters,
  // not mere code units
  return [...str].length;
}

console.log(getCharacterLength("A\uD87E\uDC04Z")); // 3

Wenn Sie Zeichen nach Graphem-Clustern zählen möchten, verwenden Sie Intl.Segmenter. Sie können zunächst den String, den Sie aufteilen möchten, an die segment()-Methode übergeben und dann über das zurückgegebene Segments-Objekt iterieren, um die Länge zu erhalten:

js
function getGraphemeCount(str) {
  const segmenter = new Intl.Segmenter("en-US", { granularity: "grapheme" });
  // The Segments object iterator that is used here iterates over characters in grapheme clusters,
  // which may consist of multiple Unicode characters
  return [...segmenter.segment(str)].length;
}

console.log(getGraphemeCount("👨‍👩‍👧‍👧")); // 1

Beispiele

Grundlegende Verwendung

js
const x = "Mozilla";
const empty = "";

console.log(`${x} is ${x.length} code units long`);
// Mozilla is 7 code units long

console.log(`The empty string has a length of ${empty.length}`);
// The empty string has a length of 0

Strings mit einer Länge, die nicht der Anzahl der Zeichen entspricht

js
const emoji = "😄";
console.log(emoji.length); // 2
console.log([...emoji].length); // 1
const adlam = "𞤲𞥋𞤣𞤫";
console.log(adlam.length); // 8
console.log([...adlam].length); // 4
const formula = "∀𝑥∈ℝ,𝑥²≥0";
console.log(formula.length); // 11
console.log([...formula].length); // 9

Zuweisung an length

Da ein String ein primitiver Datentyp ist, hat der Versuch, einem String die length-Eigenschaft zuzuweisen, keine beobachtbaren Auswirkungen und wird im Strict mode einen Fehler auslösen.

js
const myString = "bluebells";

myString.length = 4;
console.log(myString); // "bluebells"
console.log(myString.length); // 9

Spezifikationen

Spezifikation
ECMAScript® 2027 Language Specification
# sec-properties-of-string-instances-length

Browser-Kompatibilität

Siehe auch