String.prototype.isWellFormed()
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Oktober 2023 browserübergreifend verfügbar.
Die Methode isWellFormed() von String-Werten gibt einen booleschen Wert zurück, der angibt, ob dieser String ungepaarte Surrogate enthält.
Syntax
isWellFormed()
Parameter
Keine.
Rückgabewert
Gibt true zurück, wenn dieser String keine ungepaarten Surrogate enthält, andernfalls false.
Beschreibung
Strings in JavaScript sind UTF-16-kodiert. Bei der UTF-16-Kodierung gibt es das Konzept der Surrogatpaare, das im Abschnitt UTF-16-Zeichen, Unicode-Codepunkte und Graphemcluster ausführlich erläutert wird.
Mit isWellFormed() können Sie prüfen, ob ein String wohlgeformt ist (d.h. keine ungepaarten Surrogate enthält). Im Vergleich zu einer eigenen Implementierung ist isWellFormed() effizienter, da JavaScript-Engines direkt auf die interne Darstellung von Strings zugreifen können. Wenn Sie einen String in einen wohlgeformten String umwandeln müssen, verwenden Sie die Methode toWellFormed(). Mit isWellFormed() können Sie nicht wohlgeformte Strings anders behandeln als wohlgeformte Strings, beispielsweise indem Sie einen Fehler auslösen oder den String als ungültig kennzeichnen.
Beispiele
>Verwendung von isWellFormed()
const strings = [
// Lone leading surrogate
"ab\uD800",
"ab\uD800c",
// Lone trailing surrogate
"\uDFFFab",
"c\uDFFFab",
// Well-formed
"abc",
"ab\uD83D\uDE04c",
];
for (const str of strings) {
console.log(str.isWellFormed());
}
// Logs:
// false
// false
// false
// false
// true
// true
Vermeiden von Fehlern in encodeURI()
encodeURI löst einen Fehler aus, wenn der übergebene String nicht wohlgeformt ist. Dies lässt sich vermeiden, indem Sie den String mit isWellFormed() prüfen, bevor Sie ihn an encodeURI() übergeben.
const illFormed = "https://example.com/search?q=\uD800";
try {
encodeURI(illFormed);
} catch (e) {
console.log(e); // URIError: URI malformed
}
if (illFormed.isWellFormed()) {
console.log(encodeURI(illFormed));
} else {
console.warn("Ill-formed strings encountered."); // Ill-formed strings encountered.
}
Spezifikationen
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # sec-string.prototype.iswellformed> |