Signatur
Beschreibung
strike() gehört zu den sogenannten HTML-Wrapper-Methoden von String. Die Methode umschließt den String mit <strike> und </strike> und gibt das Ergebnis als neuen String zurück. So wird aus "Alt" der String "<strike>Alt</strike>". Der ursprüngliche String bleibt unverändert, da Strings in JavaScript unveränderlich sind.
Die Methode stammt aus der Anfangszeit von JavaScript, als HTML oft per String-Verkettung und document.write() erzeugt wurde. Sie ist in ECMAScript nur noch im Anhang B („Legacy-Features für Webbrowser“) definiert und gilt als veraltet. Auch das Element <strike> selbst ist in HTML5 obsolet.
In neuem Code nimmt man stattdessen das semantische Element <s> (nicht mehr zutreffender Inhalt) oder <del> (gelöschter Inhalt), erzeugt über DOM-Methoden wie document.createElement(), oder man setzt die CSS-Eigenschaft text-decoration: line-through. strike() ist heute im Grunde nur noch wichtig, um alten Code zu verstehen oder zu migrieren.
Rückgabewert
<strike>…</strike>, der den ursprünglichen String unverändert (ohne Escaping) enthält.Beispiele
Grundlegende Verwendung
const preis = "49,99 €";
const markup = preis.strike();
console.log(markup);
console.log(preis); // Original bleibt unverändert
Legacy-Code: alter Preis im Warenkorb
const artikel = { name: "Kopfhörer", alt: 89, neu: 59 };
// Alter Stil (veraltet)
const html = `${artikel.name}: ${String(artikel.alt + " €").strike()} ${artikel.neu} €`;
console.log(html);
Moderne Alternative mit DOM und <s>
const zeigePreis = (container, alt, neu) => {
const s = document.createElement("s");
s.textContent = `${alt} €`; // textContent escapt automatisch
container.append(s, ` ${neu} €`);
};
zeigePreis(document.querySelector("#preis"), 89, 59);
console.log(document.querySelector("#preis").innerHTML);
Fallstrick: kein Escaping von HTML
const eingabe = "<img src=x onerror=alert(1)>";
console.log(eingabe.strike());
// Wichtig · Fallstricke
- Veraltet:
strike()ist nur in Anhang B der ECMAScript-Spezifikation definiert. Alle Browser und Node.js unterstützen die Methode noch aus Kompatibilitätsgründen. Für neuen Code solltest du sie nicht mehr verwenden. - Obsoletes Element:
<strike>ist in HTML5 nicht mehr gültig. Nimm stattdessen<s>,<del>oder CSS mittext-decoration: line-through. - Sicherheit (XSS): Die Methode escapt den Inhalt nicht. Wenn Nutzereingaben mit
strike()umschlossen und dann perinnerHTMLoderdocument.write()eingefügt werden, kann Schadcode ausgeführt werden. Setze Text lieber übertextContentein. - Bei
nulloderundefinedalsthis(z. B.String.prototype.strike.call(null)) wird einTypeErrorausgelöst. Andere Werte werden vorher in einen String umgewandelt. - Die Methode hat keine Parameter. Übergebene Argumente werden ignoriert.