Start · Sprachen · JavaScript · Referenz · String.prototype.repeat()

String.prototype.repeat()

Methode

Gibt einen neuen String zurück, der aus <code>count</code> aneinandergehängten Kopien des ursprünglichen Strings besteht.

seit JavaScript ES2015 Kategorie: method-property

Signatur

String.prototype.repeat(count)

Beschreibung

Die Methode repeat() erzeugt einen neuen String, in dem der Ausgangsstring count-mal hintereinander steht. Der ursprüngliche String bleibt unverändert, denn Strings sind in JavaScript unveränderlich.

Typische Einsatzfälle sind Einrückungen, Trennlinien und Platzhalter in der Konsolenausgabe, einfache Fortschrittsbalken, Maskierungen (z. B. "*".repeat(n)) und das Erzeugen von Testdaten mit bestimmter Länge.

Das Argument wird zuerst in eine ganze Zahl umgewandelt (Nachkommastellen werden abgeschnitten, NaN und undefined ergeben 0). Mit 0 erhält man einen leeren String. Negative Werte und Infinity lösen einen RangeError aus. Soll ein String nur bis zu einer bestimmten Gesamtlänge aufgefüllt werden, sind padStart() oder padEnd() meist die bessere Wahl.

Parameter

Name Typ Default Beschreibung
$count Pflicht number Wie oft der String wiederholt wird. Erlaubt ist eine ganze Zahl zwischen 0 und +Infinity (ausschließlich). Nachkommastellen werden abgeschnitten; nicht-numerische Werte werden per ToNumber umgewandelt.

Rückgabewert

Typ
string
Beschreibung
Ein neuer String mit count Kopien des Ausgangsstrings. Bei count = 0 ist das ein leerer String "".

Beispiele

Grundlagen und Umwandlung des Arguments

console.log("ab".repeat(3));
console.log("ab".repeat(0));
console.log("ab".repeat(2.9)); // wird auf 2 abgeschnitten
console.log("ab".repeat("2")); // String wird in Zahl umgewandelt
console.log("ab".repeat()); // undefined → 0
ababab abab abab

Trennlinie und Einrückung für Konsolenausgabe

const printTree = (node, depth = 0) => {
  console.log(`${"  ".repeat(depth)}- ${node.name}`);
  (node.children ?? []).forEach((child) => printTree(child, depth + 1));
};

console.log("=".repeat(20));
printTree({
  name: "src",
  children: [{ name: "lib", children: [{ name: "utils.js" }] }, { name: "index.js" }],
});
console.log("=".repeat(20));
==================== - src - lib - utils.js - index.js ====================

Einfacher Fortschrittsbalken

const progressBar = (percent, width = 20) => {
  const filled = Math.round((percent / 100) * width);
  return `[${"#".repeat(filled)}${"-".repeat(width - filled)}] ${percent}%`;
};

console.log(progressBar(35));
console.log(progressBar(100));
[#######-------------] 35% [####################] 100%

Fehlerbehandlung bei ungültigem Argument

const safeRepeat = (str, n) => {
  try {
    return str.repeat(n);
  } catch (err) {
    console.log(`${err.name}: ungültige Anzahl ${n}`);
    return "";
  }
};

safeRepeat("x", -1);
safeRepeat("x", Infinity);
RangeError: ungültige Anzahl -1 RangeError: ungültige Anzahl Infinity

// Wichtig · Fallstricke

  • RangeError: Negative Werte und Infinity lösen einen RangeError aus. Das passiert z. B., wenn bei width - filled ein negativer Wert herauskommt. Wer auf Nummer sicher gehen will, schreibt Math.max(0, n).
  • Maximale Stringlänge: Überschreitet das Ergebnis die maximale Stringlänge der Engine (in V8 etwa 229–230 Zeichen), gibt es ebenfalls einen RangeError (Invalid string length). Große Werte von count kosten außerdem viel Speicher.
  • Leerer String: "".repeat(n) liefert für jedes gültige n einen leeren String – auch für sehr große Werte.
  • Unicode: Wiederholt werden UTF-16-Codeeinheiten. Bei Emojis und zusammengesetzten Zeichen stimmt length des Ergebnisses daher nicht mit der Anzahl der sichtbaren Zeichen überein.
  • Generisch: Die Methode wandelt this in einen String um. Mit String.prototype.repeat.call(123, 2) erhält man also "123123". Bei null oder undefined als this gibt es einen TypeError.
  • Kompatibilität: Wird von allen modernen Browsern und von Node.js ab 4 unterstützt. Der Internet Explorer kennt die Methode nicht, dort braucht man ein Polyfill (z. B. core-js).