如何在 JavaScript 中检查两个字符串是否相等

摘要:在本教程中,您将学习如何在 JavaScript 中检查两个字符串是否相等。

假设您有以下两个字符串

const s1 = 'Hi';
const s2 = 'Hi';Code language: JavaScript (javascript)

由于s1s2具有相同的字符,因此在使用===运算符比较它们时,它们是相等的。

console.log(s1 === s2); // trueCode language: JavaScript (javascript)

考虑以下示例

const s1 = 'café';
const s2 = 'café';
console.log(s1===s2); // falseCode language: JavaScript (javascript)

在这个例子中,s1s2看起来是一样的。但是比较 s1 === s2 评估为false

要了解它的工作原理,您首先需要了解音位和组合字符的概念。

什么是音位

一个音位是书写系统中最小的功能单位。

例如,字符串café有四个字母:café(或带有acutee)。您看到每个字符是书写单位的方式被称为音位。

一些音位可以使用不同的字符序列表示。

有些字符,当您将它们放在一个字符之后时,会修改前一个字符。这些字符被称为组合字符。

什么是组合字符

组合字符是应用于前一个基本字符以创建音位的字符。

在我们的例子中,é是一个原子音位。您可以使用小写e(基本字符)和一个组合字符 (◌́) 来编码它。

e + ◌́ = é

在 JavaScript 中,字符 é 表示如下

const c1 = 'e\u0301';
console.log(c1); // Code language: JavaScript (javascript)

在这个例子中,\u0301是组合字符 ◌́ 的 Unicode 转义序列。

此外,您可以使用带重音符的小写e来编码相同的音位 é

const c2 = 'é';
console.log(c2);Code language: JavaScript (javascript)

现在,如果您比较同一个音位 éc1c2,您会发现它们并不相等。

const c1 = 'e\u0301';
const c2 = 'é';
console.log(c1 === c2); // falseCode language: JavaScript (javascript)

为了安全地比较这些字符串,您可以使用normalize()方法。此方法返回字符串的 Unicode 规范化形式。例如

const c1 = 'e\u0301';
console.log(c1.normalize()); // 
éCode language: JavaScript (javascript)

因此,c1c2 在规范化后将相等。

const c1 = 'e\u0301';
const c2 = 'é';
console.log(c1.normalize() === c2.normalize()); // trueCode language: JavaScript (javascript)

同样,比较以下字符串也返回true

const s1 = 'café';
const s2 = 'café';
console.log(s1.normalize() === s2.normalize()); // trueCode language: JavaScript (javascript)

总结

  • 一般来说,如果字符串只包含 ASCII 字符,您可以使用 === 运算符来检查它们是否相等。
  • 当字符串包含包含组合字符的字符时,您需要先对其进行规范化,然后再进行比较以确定是否相等。
本教程是否有帮助?