String 的 normalize() 方法返回该字符串的 Unicode 标准化形式。
{{InteractiveExample("JavaScript Demo: String.normalize()", "taller")}}
```js interactive-example const name1 = "\u0041\u006d\u00e9\u006c\u0069\u0065"; const name2 = "\u0041\u006d\u0065\u0301\u006c\u0069\u0065";
console.log(${name1}, ${name2});
// Expected output: "Amélie, Amélie"
console.log(name1 === name2);
// Expected output: false
console.log(name1.length === name2.length);
// Expected output: false
const name1NFC = name1.normalize("NFC"); const name2NFC = name2.normalize("NFC");
console.log(${name1NFC}, ${name2NFC});
// Expected output: "Amélie, Amélie"
console.log(name1NFC === name2NFC);
// Expected output: true
console.log(name1NFC.length === name2NFC.length);
// Expected output: true
## 语法
```js-nolint
normalize()
normalize(form)
参数
form{{optional_inline}}- : 是
"NFC"、"NFD"、"NFKC"或"NFKD"其中之一,用于指定 Unicode 标准化形式。如果省略或为undefined,则使用"NFC"。
这些值具有以下含义:
"NFC"- : 规范分解,然后进行规范组合。
"NFD"- : 规范分解。
"NFKC"- : 兼容分解,然后进行规范组合。
"NFKD"- : 兼容分解。
- : 是
返回值
一个包含给定字符串的 Unicode 标准化形式的字符串。
异常
RangeError- : 如果
form不是上述指定的值之一,将抛出该异常。
- : 如果
描述
Unicode 为每个字符分配一个唯一的数值,称为码位。例如,字母 "A" 的码位被表示为 U+0041。然而,有时候一个抽象字符可以由一个或多个码位或码位序列来表示,比如字母 "ñ" 可以被以下任意一种方式表示:
- 单个码位 U+00F1。
- 字母
"n"的码位(U+006E)后跟组合波浪符的码位(U+0303)。
const string1 = "\u00F1";
const string2 = "\u006E\u0303";
console.log(string1); // ñ
console.log(string2); // ñ
然而,由于码位不同,字符串比较不会将它们视为相等。而且由于每个版本中的码位数量不同,它们甚至具有不同的长度。
const string1 = "\u00F1"; // ñ
const string2 = "\u006E\u0303"; // ñ
console.log(string1 === string2); // false
console.log(string1.length); // 1
console.log(string2.length); // 2
normalize() 方法将字符串转换为一种标准化形式,这有助于解决这个问题,该标准化形式适用于表示相同字符的所有码位序列。有两种主要的标准化形式,一种基于规范等价性,另一种基于兼容性。
#