1

我知道这可能看起来很傻,但我仍然不知道为什么会发生这种情况(已经好几次了。)

alert(
"WWVhaCA6RCwgYSBsb3Qgb2YgcGVvcGxlIGRvbid0IGtub3cgdGhhdCB0aGlzIGlzIGVuY29kZWQgOkQ=" == 
"WWVhaCA6RCwgYSBsb3Qgb2YgcGVvcGxlIGRvbid0IGtub3cgdGhhdCB0aGlzIGlzIGVuY29kZWQgOkQ=")​

演示:http: //jsfiddle.net/DerekL/b38Cn/

它应该返回true,但它返回false. 我查看了每个字符(在记事本中,因为它使用等宽字体),它们完全相同。

4

4 回答 4

4

正如@ElliotBonneville 所说,文本中有一个隐藏的 unicode 字符。通过将字符串粘贴到命令提示符中可以看到:

截屏

注意?第一个字符串末尾的 。

于 2012-11-28T00:08:22.913 回答
4

奇怪的是,当我将您的代码复制并粘贴到我的编辑器时,我得到了这样的结果:

“WWVhaCA6RCwgYSBsb3Qgb2YgcGVvcGxlIGRvbid0IGtub3cgdGhhdCB0aGlzIGlzIGVuY29kZWQgOkQ=

第二部分:

"WWVhaCA6RCwgYSBsb3Qgb2YgcGVvcGxlIGRvbid0IGtub3cgdGhhdCB0aGlzIGlzIGVuY29kZWQgOkQ="

注意第一个字符串中多余的“ ? ”?在 jsFiddle 上视觉上它没有出现。我复制了你的字符串并删除了额外的并在 jsFiddle 上运行它。它工作得很好。

于 2012-11-28T00:11:01.637 回答
3

你是从 jsFiddle 复制这个字符串还是什么?有一个 Unicode 字符没有出现在记事本或我的浏览器(Chrome,如果您想知道的话)中并导致了问题。复制第一个字符串并将其粘贴到第二个字符串中(在确认两者看起来相同之后)导致问题消失。

我会粘贴一个指向更新的 jsFiddle 的链接,但我不允许这样做。

于 2012-11-28T00:03:52.817 回答
3

向零宽度非破坏空间问好!

您的第一个字符串末尾包含一个0xfeff字符。这不会出现在大多数现代编辑器中,这可能就是您甚至没有注意到它的原因。

零宽度不间断空格 (ZWNBSP) 不推荐使用代码点 U+FEFF 处的 Unicode 字符。字符 U+FEFF 旨在用作文件开头的字节顺序标记。但是,如果在其他地方遇到它,根据 Unicode,它应该被视为“零宽度不间断空间”。出于此目的故意使用 U+FEFF 现在已弃用,强烈推荐使用 U+2060 单词连接器(HTML:⁠)。

来源:维基百科

.charCodeAt()当您遇到看似相同的字符串时,您应该在循环内使用分解它们以查找任何“流氓”字符。

于 2012-11-28T00:13:20.467 回答