◆ 文字列中のサロゲートペアが壊れてないか確認できる
◆ 壊れてたら代替文字に置き換えてくれるメソッドもある

Chrome 111 で文字列の isWellFormed メソッドが使えるようになりました
普段はあまり使うシーンはなさそうですが いつか使うことがあるかもと思えるものです

isWellFormed()

普通の文字列は基本 true です
絵文字や制御文字も true です

"abc".isWellFormed()
// true

"あいう".isWellFormed()
// true

"❄".isWellFormed()
// true

"🌌".isWellFormed()
// true

"\u0000".isWellFormed()
// true

"\u0001".isWellFormed()
// true

2 文字分になる 4 バイトの絵文字を 1 文字だけにすると false です

"🌌".length
// 2

"🌌"[0]
// '\uD83C'

"🌌"[0].isWellFormed()
// false

"🌌"[1].isWellFormed()
// false

絵文字を含む文字列を単純に文字数で切り取ったときに 分割されて壊れてしまってないかを確認できます

どこからどこまでの範囲の文字が false になるか調べてみました

Array.from(Array(2 ** 16).keys())
.filter(i => !String.fromCharCode(i).isWellFormed())

結果は 55296 ~ 57343 (U+D800 ~ U+DFFF) までの 2048 文字でした
サロゲートペアの範囲ですね

toWellFormed()

toWellFormed というメソッドも合わせて追加されています

これは isWellFormed で false になるような文字があった場合に U+FFFD (�) に置き換えてくれるものです

"🌌"[0].toWellFormed()
// '�'

"🌌"[0].toWellFormed().charCodeAt()
// 65533

"🌌"[1].toWellFormed().charCodeAt()
// 65533

壊れてしまってる場合は � に変換したほうが視覚的に見えますし そのまま結合されて意図しない形になることを防げます
壊れたものを無理やり組み合わせると関係ない絵文字が生まれたりしますからね

"🐠"[0] + "🪐"[1]
// '🚐'