看起来相同的字符串不相等

Strings that look the same aren't equal

一些单元测试失败。经过调试,我发现问题在这里

var a = "USD 1,234.12"
var b = "USD 1,234.12"
console.log(a === b)

字符串 a 由货币格式化程序库生成,字符串 b 由单元测试开发人员编写。

我不明白为什么 === 认为这两个看起来相同的字符串不相等。这里发生了什么?

您的两个字符串中存在隐藏的差异。 运行 这个:

var a = "USD 1,234.12"
var b = "USD 1,234.12"

for (var i = 0; i < a.length; i++) {
  console.log(a.codePointAt(i), b.codePointAt(i));
}

b字符串中的space是一个普通的space(32),而a字符串中的space是一个Unicode非-breaking space (160).