Javascript 看似相等字符串的奇怪问题

Javascript 看似相等字符串的奇怪问题,javascript,Javascript,我知道这看起来很傻,但我仍然不知道为什么已经发生了好几次了 alert( "WWVhaCA6RCwgYSBsb3Qgb2YgcGVvcGxlIGRvbid0IGtub3cgdGhhdCB0aGlzIGlzIGVuY29kZWQgOkQ=" == "WWVhaCA6RCwgYSBsb3Qgb2YgcGVvcGxlIGRvbid0IGtub3cgdGhhdCB0aGlzIGlzIGVuY29kZWQgOkQ=")​ 演示: 它应该返回true,但却返回false。我查看了记事本中的每个字符,因为

我知道这看起来很傻,但我仍然不知道为什么已经发生了好几次了

alert(
"WWVhaCA6RCwgYSBsb3Qgb2YgcGVvcGxlIGRvbid0IGtub3cgdGhhdCB0aGlzIGlzIGVuY29kZWQgOkQ=" == 
"WWVhaCA6RCwgYSBsb3Qgb2YgcGVvcGxlIGRvbid0IGtub3cgdGhhdCB0aGlzIGlzIGVuY29kZWQgOkQ=")​
演示:


它应该返回true,但却返回false。我查看了记事本中的每个字符,因为它使用单空格字体,而且它们完全相同。

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


我想粘贴一个到更新的JSFIDLE的链接,但我不被允许粘贴。

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


我想粘贴到更新的JSFIDLE的链接,但我不被允许粘贴。

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


注意到了吗?在第一个字符串的末尾。

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


注意到了吗?在第一个字符串的末尾。

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

WWVHACA6RCWGYSBSB3QGB2YGCGVCGXLIGRVBID0IGTUB3CGGHHDCB0AGLZIGLZIGVUY29KZWQGOKQ=

第二部分:

WWVHACA6RCWGYSBSB3QGB2YGCGVCGXLIGRVBID0IGTUB3CGGHHDCB0AGLZIGLZIGVUY29KZWQGOKQ=

注意到额外的吗?第一串?在JSFIDLE上,它不会出现。
我复制了你的字符串并删除了多余的?并在JSFIDLE上运行它。它工作得很好。

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

WWVHACA6RCWGYSBSB3QGB2YGCGVCGXLIGRVBID0IGTUB3CGGHHDCB0AGLZIGLZIGVUY29KZWQGOKQ=

第二部分:

WWVHACA6RCWGYSBSB3QGB2YGCGVCGXLIGRVBID0IGTUB3CGGHHDCB0AGLZIGLZIGVUY29KZWQGOKQ=

注意到额外的吗?第一串?在JSFIDLE上,它不会出现。 我复制了你的字符串并删除了多余的?并在JSFIDLE上运行它。它工作得很好。

向客户问好

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

零宽度不间断空格ZWNBSP是在代码点U+FEFF处不推荐使用的Unicode字符。字符U+FEFF用作文件开头的字节顺序标记。但是,根据Unicode,如果在其他地方遇到,则应将其视为零宽度非中断空间。出于此目的而故意使用U+FEFF现在已被弃用,使用U+2060 word joiner HTML:⁠ 非常喜欢

资料来源:

当您遇到看似相同的字符串时,应在循环中使用.charCodeAt将其分解,以查找任何恶意字符。

向用户问好

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

零宽度不间断空格ZWNBSP是在代码点U+FEFF处不推荐使用的Unicode字符。字符U+FEFF用作文件开头的字节顺序标记。但是,根据Unicode,如果在其他地方遇到,则应将其视为零宽度非中断空间。出于此目的而故意使用U+FEFF现在已被弃用,使用U+2060 word joiner HTML:⁠ 非常喜欢

资料来源:


当您遇到看似相同的字符串时,应在循环中使用.charCodeAt将其分解,以查找任何恶意字符。

您是否尝试过比较长度?第一个是81,第二个是80。@Andreas-第81个字符65279是如何进入字符串的?复制粘贴,搞乱php脚本。。。对于这个问题有一些选择:您是否尝试过比较长度?第一个是81,第二个是80。@Andreas-第81个字符65279是如何进入字符串的?复制粘贴,搞乱php脚本。。。对于这个问题有一些选择:你不被允许?有什么政策吗?显然,是的。这一定是因为有那么多人只是简单地发布到JSFIDLE的链接,而不是在他们的答案中发布实际的代码。这是新的,我以前没见过。我知道人们不喜欢你把一个问题当作一把小提琴来发帖。但是,如果你有一个解释要遵循的话,包含一个也不错。在你的情况下,你要彻底地解释它,这样就可以添加一把小提琴来支持这一说法。现在,如果你只是发布了一个没有答案的小提琴,那么是的,
整天投否决票。你不被允许吗?有什么政策吗?显然,是的。这一定是因为有那么多人只是简单地发布到JSFIDLE的链接,而不是在他们的答案中发布实际的代码。这是新的,我以前没见过。我知道人们不喜欢你把一个问题当作一把小提琴来发帖。但是,如果你有一个解释要遵循的话,包含一个也不错。在你的情况下,你要彻底地解释它,这样就可以添加一把小提琴来支持这一说法。现在,如果你只是发布了一个没有答案的小提琴,那么是的,一整天都在向下投票。很好的发现,没有想到要将字符串粘贴到命令提示符中。是什么让你这么想的?我做了一个长度比较,注意到了差异,然后转向普通的、老的、特别的、不能容忍的DOS!:很好的发现,没有想到将字符串粘贴到命令提示符中。是什么让你这么想的?我做了一个长度比较,注意到了差异,然后转向普通的、老的、特别的、不能容忍的DOS!:对不起。没有看到Elliot Bonneville和bPratik回答。不麻烦,+1让你开始这么做!啊哈。谢谢你,伙计!干杯对不起。没有看到Elliot Bonneville和bPratik回答。不麻烦,+1让你开始这么做!啊哈。谢谢你,伙计!干杯