摘要:在本教程中,您将学习如何在 JavaScript 中检查两个字符串是否相等。
假设您有以下两个字符串
const s1 = 'Hi';
const s2 = 'Hi';
Code language: JavaScript (javascript)
由于s1
和s2
具有相同的字符,因此在使用===
运算符比较它们时,它们是相等的。
console.log(s1 === s2); // true
Code language: JavaScript (javascript)
考虑以下示例
const s1 = 'café';
const s2 = 'café';
console.log(s1===s2); // false
Code language: JavaScript (javascript)
在这个例子中,s1
和s2
看起来是一样的。但是比较 s1 === s2 评估为false
。
要了解它的工作原理,您首先需要了解音位和组合字符的概念。
什么是音位
一个音位是书写系统中最小的功能单位。
例如,字符串café
有四个字母:c
、a
、f
和é
(或带有acute
的e
)。您看到每个字符是书写单位的方式被称为音位。
一些音位可以使用不同的字符序列表示。
有些字符,当您将它们放在一个字符之后时,会修改前一个字符。这些字符被称为组合字符。
什么是组合字符
组合字符是应用于前一个基本字符以创建音位的字符。
在我们的例子中,é
是一个原子音位。您可以使用小写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)
现在,如果您比较同一个音位 é
的 c1
和 c2
,您会发现它们并不相等。
const c1 = 'e\u0301';
const c2 = 'é';
console.log(c1 === c2); // false
Code language: JavaScript (javascript)
为了安全地比较这些字符串,您可以使用normalize()
方法。此方法返回字符串的 Unicode 规范化形式。例如
const c1 = 'e\u0301';
console.log(c1.normalize()); //
é
Code language: JavaScript (javascript)
因此,c1
和 c2
在规范化后将相等。
const c1 = 'e\u0301';
const c2 = 'é';
console.log(c1.normalize() === c2.normalize()); // true
Code language: JavaScript (javascript)
同样,比较以下字符串也返回true
const s1 = 'café';
const s2 = 'café';
console.log(s1.normalize() === s2.normalize()); // true
Code language: JavaScript (javascript)
总结
- 一般来说,如果字符串只包含 ASCII 字符,您可以使用 === 运算符来检查它们是否相等。
- 当字符串包含包含组合字符的字符时,您需要先对其进行规范化,然后再进行比较以确定是否相等。
本教程是否有帮助?