Signatur
Beschreibung
String.fromCodePoint() ist eine statische Methode von String. Sie wird also immer als String.fromCodePoint() aufgerufen und nicht auf einer String-Instanz. Jedes Argument gilt als Unicode-Codepunkt im Bereich 0 bis 0x10FFFF. Die Methode setzt daraus den passenden UTF-16-String zusammen.
Der große Vorteil gegenüber dem älteren String.fromCharCode(): Codepunkte oberhalb von 0xFFFF (Emojis, historische Schriften, mathematische Symbole) werden automatisch in ein Surrogatpaar umgewandelt. Diese Aufteilung müssen Sie nicht selbst berechnen.
Typische Einsatzfälle sind:
- das Erzeugen von Zeichen aus numerischen Codes, z. B. beim Dekodieren von HTML-Entities wie
😀, - das Zurückwandeln von Codepunkten, die Sie mit
codePointAt()gelesen haben, - das Erzeugen von Zeichenbereichen, etwa für Flaggen-Emojis aus Ländercodes.
Ungültige Werte führen nicht zu einem stillschweigend falschen Ergebnis, sondern lösen einen RangeError aus.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $...codePoints | number | Null oder mehr Unicode-Codepunkte. Jeder Wert muss eine ganze Zahl zwischen 0 und 0x10FFFF sein. Werte, die keine Zahlen sind, werden vorher mit Number() umgewandelt. |
Rückgabewert
"".Beispiele
Einfache Zeichen und Emojis erzeugen
console.log(String.fromCodePoint(72, 105)); // "Hi"
console.log(String.fromCodePoint(0x1F600)); // Emoji
console.log(String.fromCodePoint(0x1F600).length); // Surrogatpaar
console.log(String.fromCodePoint()); // leerer String
Numerische HTML-Entities dekodieren
const decodeEntities = (text) =>
text
.replace(/&#x([0-9a-f]+);/gi, (_, hex) => String.fromCodePoint(parseInt(hex, 16)))
.replace(/&#(\d+);/g, (_, dec) => String.fromCodePoint(Number(dec)));
console.log(decodeEntities('Grüße 👋'));
Flaggen-Emoji aus einem Ländercode
const flag = (countryCode) =>
String.fromCodePoint(
...[...countryCode.toUpperCase()].map((c) => 0x1F1E6 + c.charCodeAt(0) - 65)
);
console.log(flag('de'), flag('AT'), flag('ch'));
Ungültige Codepunkte abfangen
const safeChar = (cp) => {
try {
return String.fromCodePoint(cp);
} catch (err) {
return `Fehler: ${err.name}`;
}
};
console.log(safeChar(0x10FFFF + 1));
console.log(safeChar(3.14));
console.log(safeChar(-1));
// Wichtig · Fallstricke
- RangeError statt stiller Fehler: Die Methode wirft einen
RangeError, wenn ein Wert keine ganze Zahl ist (z. B.3.14,NaNoder'abc'), wenn er negativ ist oder wenn er größer als0x10FFFFist.String.fromCharCode()kürzt solche Werte dagegen stillschweigend auf 16 Bit. - Länge ist nicht gleich Zeichenanzahl: Codepunkte über
0xFFFFergeben zwei UTF-16-Codeeinheiten, deshalb ist.lengthdann2. Zeichen zählen Sie besser mit[...str].length. - Einzelne Surrogate: Werte zwischen
0xD800und0xDFFFsind erlaubt, ergeben aber einen String mit einzelnen Surrogaten, die für sich allein ungültig sind. Mitstr.isWellFormed()(ES2024) können Sie das prüfen. - Sehr viele Argumente: Wenn Sie große Arrays per Spread-Syntax übergeben (
String.fromCodePoint(...arr)), kann bei sehr vielen Elementen die Grenze für Funktionsargumente überschritten werden. Verarbeiten Sie große Arrays daher in Teilstücken. - Kompatibilität: Die Methode wird in allen modernen Browsern und in Node.js ab Version 4 unterstützt. Der Internet Explorer unterstützt sie nicht.