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

String.prototype.fixed()

Methode

Gibt einen neuen String zurück, der den Ausgangsstring in ein <code>&lt;tt&gt;</code>-Element einbettet. Veraltete HTML-Wrapper-Methode.

seit JavaScript ES2015 (Annex B, veraltet) – Baseline: alle Browse deprecated seit ja Kategorie: method-property

Signatur

String.prototype.fixed()

Beschreibung

Die Methode fixed() gehört zu den sogenannten HTML-Wrapper-Methoden von String. Sie gibt einen neuen String zurück, in dem der ursprüngliche Text von <tt> und </tt> umschlossen ist. Früher zeigten Browser solchen Text in einer Schrift mit fester Zeichenbreite (Monospace) an.

Der Ausgangsstring bleibt unverändert, denn Strings sind in JavaScript unveränderlich. fixed() ändert nichts am DOM. Die Methode erzeugt nur Markup als Text. Erst wenn dieser Text zum Beispiel über innerHTML eingefügt wird, entsteht ein Element.

Die Methode ist nur noch aus Gründen der Abwärtskompatibilität in Anhang B der ECMAScript-Spezifikation enthalten. Das Element <tt> selbst ist seit HTML5 ebenfalls veraltet. In neuem Code solltest du je nach Bedeutung <code>, <kbd> oder <samp> verwenden, die Elemente per DOM-API erzeugen und die Darstellung über CSS (font-family: monospace) steuern.

Rückgabewert

Typ
string
Beschreibung
Ein neuer String der Form <tt>str</tt>. Dabei ist str der in einen String umgewandelte this-Wert.

Beispiele

Grundlegende Verwendung

const befehl = 'npm install';
const html = befehl.fixed();

console.log(html);
console.log(befehl); // Original bleibt unverändert
<tt>npm install</tt> npm install

Moderne Alternative: Element per DOM-API erzeugen

// Statt: container.innerHTML = befehl.fixed();
const container = document.createElement('div');
const befehl = 'git status';

const code = document.createElement('code');
code.textContent = befehl; // sicher, kein HTML-Parsing
code.style.fontFamily = 'monospace';
container.append(code);

console.log(container.innerHTML);
<code style="font-family: monospace;">git status</code>

Fallstrick: Keine Maskierung von Sonderzeichen

const eingabe = '<img src=x onerror=alert(1)>';

// fixed() maskiert den Inhalt NICHT, das ist gefährlich
console.log(eingabe.fixed());

// Sicherer: Inhalt vorher selbst maskieren
const escapeHtml = (s) => s.replace(/[&<>"']/g, (c) => ({
  '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;'
}[c]));

console.log(escapeHtml(eingabe).fixed());
<tt><img src=x onerror=alert(1)></tt> <tt>&lt;img src=x onerror=alert(1)&gt;</tt>

// Wichtig · Fallstricke

  • Veraltet: fixed() ist in Anhang B von ECMAScript definiert. Es gibt sie nur noch für ältere Webseiten. In neuem Code solltest du sie nicht verwenden. Auch das erzeugte <tt>-Element ist in HTML5 nicht mehr zulässig.
  • Sicherheit (XSS): Der Inhalt wird nicht maskiert. Nicht vertrauenswürdige Eingaben, die mit fixed() umschlossen und per innerHTML eingefügt werden, können Skripte einschleusen. Verwende stattdessen textContent und document.createElement().
  • Kompatibilität: Die Methode wird in allen gängigen Browsern und in Node.js unterstützt. Laufzeiten ohne Anhang B müssen sie aber nicht anbieten.
  • Wird die Methode auf null oder undefined aufgerufen, zum Beispiel über String.prototype.fixed.call(null), wirft sie einen TypeError.
  • Die Darstellung gehört ins CSS: font-family: monospace.