JavaScript ===运算符对于相同的字符串返回false

时间:2019-01-19 19:20:56

标签: javascript

我正在尝试使用===运算符比较来自不同来源的两个字符串,它们看起来是相同的,但是由于比较,我得到了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

1 个答案:

答案 0 :(得分:3)

尽管这两个字符串看起来相同,但我发现很难做到这一点。如果我们使用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

这里的重击可以重现问题并提供解决方案:

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