String.prototype.isWellFormed()
语法
js
isWellFormed()
参数
无。
返回值
如果此字符串不包含任何单独的代理项,则返回 true
,否则返回 false
。
描述
JavaScript 中的字符串使用 UTF-16 编码。UTF-16 编码具有代理对的概念,在 UTF-16 字符、Unicode 码点和音节簇 部分中详细介绍。
isWellFormed()
允许您测试字符串是否格式正确(即不包含任何单独的代理项)。与自定义实现相比,isWellFormed()
更有效,因为引擎可以直接访问字符串的内部表示。如果您需要将字符串转换为格式正确的字符串,请使用 toWellFormed()
方法。isWellFormed()
允许您对格式错误的字符串和格式正确的字符串进行不同的处理,例如抛出错误或将其标记为无效。
示例
使用 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
避免 encodeURI() 中的错误
如果传递的字符串格式不正确,encodeURI
会抛出错误。可以使用 isWellFormed()
在将字符串传递给 encodeURI()
之前测试字符串,从而避免这种情况。
js
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.
}
规范
规范 |
---|
ECMAScript 语言规范 # sec-string.prototype.iswellformed |
浏览器兼容性
BCD 表仅在启用 JavaScript 的浏览器中加载。