Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中,两个相等的字符串可能不相等吗?_Javascript_String_Equals - Fatal编程技术网

在Javascript中,两个相等的字符串可能不相等吗?

在Javascript中,两个相等的字符串可能不相等吗?,javascript,string,equals,Javascript,String,Equals,我和我的团队正在做一个React/Redux项目,现在我想过滤掉重复的标签,但我意识到有人在标签数据中添加了一些棘手的字符串,比如 当我将这些标记记录到控制台时,例如,标记列表的第一个和第二个标记看起来是相同的“HumanIty”,但是当我将它们与严格的相等运算符进行比较时,我得到了错误的结果 当我尝试选择并复制两个字符串标记中的文本内容,然后将它们粘贴回控制台时,我得到了一个令人惊讶的结果-第二个标记中的字符串在字符之间有空格(下图中的红点) 有人必须先面对这个问题,请给我解释一下。 谢谢

我和我的团队正在做一个React/Redux项目,现在我想过滤掉重复的标签,但我意识到有人在标签数据中添加了一些棘手的字符串,比如

当我将这些标记记录到控制台时,例如,标记列表的第一个和第二个标记看起来是相同的“HumanIty”,但是当我将它们与严格的相等运算符进行比较时,我得到了错误的结果

当我尝试选择并复制两个字符串标记中的文本内容,然后将它们粘贴回控制台时,我得到了一个令人惊讶的结果-第二个标记中的字符串在字符之间有空格(下图中的红点)

有人必须先面对这个问题,请给我解释一下。
谢谢。

每个字符串的
.length
属性是什么

如果在从0(包含)到长度(独占)的每个字符位置上迭代
索引
变量,并打印
.charCodeAt(索引)
,您会看到什么


进行此操作时,您可能会看到字符串之间的差异。

要直接回答您的问题:

在Javascript中两个相等的字符串是否可能不相等?

正如在注释中提到的,字符串中有一些不可见的字符,在比较它们时使它们不相等


要解决此问题,请使用您选择的方法删除不可见字符(我的建议是首先不要让用户输入不可见字符)。

我发现这两个看起来相似的字符串之一包含一些特殊的不可见零宽度字符,称为字节顺序标记 ()

我们可以通过regex/[^\x20-\x7E]/g将这些字符去掉,如下所示 ()

我们可以通过一些显示unicode字符的工具来检测不可见字符的存在
()

实际的“棘手字符串”应该直接发布在您的问题中,而不是作为图像链接。您已经发现了问题,字符串中有特殊字符。你的问题是如何清理这些?有许多特殊的Unicode字符不会在屏幕上呈现为可见标记。有些字符的宽度为零,它们是“不可见的”,它们没有可见的表示形式,如果将它们添加到一些已经存在的字符串中,该字符串的外观将不会更改,因为可见表示形式没有更改。您不能信任任何前端控件,并且应该具有后端剥离功能,因为前端控件仅用于UI,如果需要,可以绕过它。@WBT是的,当然。我不是在建议前端解决方案。乍一看,当我看到那些看起来相似的字符串时,我不相信这是两个不同的字符串,所以我没有检查长度:(@LocV's最欢迎调试。好的策略包括质疑你看到的和假设的东西,并检查这些假设是否真实。当你发现一个不真实的假设时,这是修复错误的一大进步。