Stringnormalize() 方法返回该字符串的 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() 方法将字符串转换为一种标准化形式,这有助于解决这个问题,该标准化形式适用于表示相同字符的所有码位序列。有两种主要的标准化形式,一种基于规范等价性,另一种基于兼容性

#