Ce face String.prototype.isWellFormed / toWellFormed
Textele JavaScript sunt formate din unități UTF-16. Emoji-urile și alte caractere rare ocupă două unități (o pereche surogat). Dacă tai textul la jumătatea unei perechi, rămâne o jumătate „orfană”, iar textul nu mai este Unicode valid.
isWellFormed returnează false dacă textul are astfel de jumătăți. toWellFormed returnează o copie în care ele sunt înlocuite cu caracterul de înlocuire U+FFFD (�). Este util înainte de encodeURIComponent, care aruncă URIError pe texte invalide.
Ce returnează
isWellFormed: true sau false. toWellFormed: un șir nou.
Exemple
Exemplul 1: Un emoji tăiat la jumătate
const mesaj = "Salut 👋";
const taiat = mesaj.slice(0, -1);
console.log(mesaj.isWellFormed());
console.log(taiat.isWellFormed());
console.log(taiat.toWellFormed());
Rezultat
true
false
Salut �
Exemplul 2: Înainte de encodeURIComponent
const taiat = "Salut 👋".slice(0, -1);
try {
encodeURIComponent(taiat);
} catch (eroare) {
console.log(eroare.name);
}
console.log(encodeURIComponent(taiat.toWellFormed()));
Rezultat
URIError
Salut%20%EF%BF%BD
Greșeli frecvente
- Tai textele cu
slicela un număr fix de unități (de exemplu pentru un rezumat) fără să verifici emoji-urile. Taie după caractere complete:[...text].slice(0, 50).join("").
Comenzi înrudite
String.prototype.normalize: Aduce textul la o formă Unicode standard; util pentru comparații și eliminarea diacriticelor.encodeURIComponent / decodeURIComponent: Codifică un text ca să poată fi pus sigur într-o adresă URL (spații, diacritice, &, =) și îl decodifică.slice: Extrage o bucată dintr-un text sau dintr-un tablou, fără să modifice originalul.