我知道这可能看起来很傻,但我仍然不知道为什么会这样(已经好几次了。)
alert(
"WWVhaCA6RCwgYSBsb3Qgb2YgcGVvcGxlIGRvbid0IGtub3cgdGhhdCB0aGlzIGlzIGVuY29kZWQgOkQ=" ==
"WWVhaCA6RCwgYSBsb3Qgb2YgcGVvcGxlIGRvbid0IGtub3cgdGhhdCB0aGlzIGlzIGVuY29kZWQgOkQ=")
演示:http://jsfiddle.net/DerekL/b38Cn/
它应该返回true
,而是返回false
。我查看了每个字符(在记事本中,因为它使用等宽字体),它们完全相同。
答案 0 :(得分:4)
正如@ElliotBonneville所说,文本中有一个隐藏的unicode字符。通过将字符串粘贴到命令提示符中可以看到它:
注意第一个字符串末尾的?
。
答案 1 :(得分:4)
奇怪的是,当我复制&将代码粘贴到我的编辑器中,我最终得到了这个:
“WWVhaCA6RCwgYSBsb3Qgb2YgcGVvcGxlIGRvbid0IGtub3cgdGhhdCB0aGlzIGlzIGVuY29kZWQgOkQ = <强>吗”
和第二部分:
“WWVhaCA6RCwgYSBsb3Qgb2YgcGVvcGxlIGRvbid0IGtub3cgdGhhdCB0aGlzIGlzIGVuY29kZWQgOkQ =”
请注意第一个字符串中的额外“?”?视觉上在jsFiddle上它没有出现。 我复制了你的字符串并删除了额外的?并在jsFiddle上运行它。它运作良好。
答案 2 :(得分:3)
你是否从jsFiddle或其他东西复制了这个字符串?有一个Unicode字符没有出现在记事本或我的浏览器中(Chrome,如果你想知道的话)并且导致了这个问题。复制第一个字符串并将其粘贴到第二个字符串中(在确认两个出现相同之后)导致问题消失。
我会将链接粘贴到更新的jsFiddle,但我不允许这样做。
答案 3 :(得分:3)
向zero width non breaking space打招呼!
您的第一个字符串最后包含0xfeff
个字符。这在大多数现代编辑中都没有出现,这可能就是你甚至没有注意到它的原因。
零宽度不间断空间(ZWNBSP)是在代码点U + FEFF处不推荐使用Unicode字符。字符U + FEFF旨在用作文件开头的字节顺序标记。但是,如果遇到其他地方,根据Unicode,它应该被视为“零宽度不间断空间”。为此目的故意使用U + FEFF现已弃用,U + 2060 word joiner(HTML:)是首选。
来源:wikipedia
当你遇到看似相同的字符串时,你应该在循环中使用.charCodeAt()
将它们分解,以找到任何“流氓”字符。