首页 > 解决方案 > JavaScript === 运算符为相同的字符串返回 false

问题描述

我正在尝试使用===运算符比较来自不同来源的两个字符串,它们看似相同,但我得到false了比较的结果。这是我正在运行的确切代码:

var a = 'House is green'; // got this value from source 1
var b = 'House is green'; // got this value from source 2
console.log(a === b); // false

笔记

您将无法通过从上面复制代码来复制问题,因为 HTML 似乎将每个空格变体转换为%20. 这就是为什么我创建了一个简单的 stackblitz 来复制问题:

https://stackblitz.com/edit/angular-s5aumq

标签: javascript

解决方案


尽管这两个字符串看起来相同,但我发现它们并非如此。如果我们将encodeURI它们都编码为它们的 UTF-8 表示,我们将得到以下结果:

var a = 'House is green';
var b = 'House is green';
console.log(a === b); // false

console.log(encodeURI(a)); // House%20is%20green
console.log(encodeURI(b)); // House%C2%A0is%C2%A0green

第一个字符串实际上使用常规空格(编码为%20),第二个字符串使用不间断空格(编码为%C2%A0)。到目前为止,我设法找出的最佳解决方案是使用replace查找所有空格字符并将其替换为常规空格字符:

var c = a.replace(/\s/g, " ");
var d = b.replace(/\s/g, " ");

console.log(c === d); // true

这是重现问题并提供解决方案的 stackblitz:

https://stackblitz.com/edit/angular-qmu8cg


推荐阅读