Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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

js
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()

js
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.

js
const illFormed = "http://hfffhd3dea44e9a2d46b4s99fcb5qf0nox6pux.ffgi.hlju.cwkeji.cn/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

Browser-Kompatibilität

Siehe auch