Могут ли две равные строки быть неравными в Javascript? - PullRequest
0 голосов
/ 04 августа 2020

Я и моя команда работаем над проектом React / Redux, и теперь я хочу отфильтровать повторяющиеся теги, но я понимаю, что кто-то поместил некоторые хитрые строки в данные тегов, например,

И когда я записываю эти теги в консоль, например, первый и второй тег в списке тегов выглядят так же, как "HumanIty", но когда я сравниваю их даже с оператором строгого равенства, я ' Получил ложный результат.

Когда я пытаюсь выделить и скопировать текстовое содержимое в обоих строковых тегах, а затем вставить их обратно в консоль, я получил неожиданный результат - строка во втором теге каким-то образом имеет пробелы между символами (красные точки на картинке ниже)

Кто-то должен столкнуться с этой проблемой, прежде чем, пожалуйста, объясните мне это. Спасибо.

Ответы [ 3 ]

1 голос
/ 04 августа 2020

Чтобы напрямую ответить на ваш вопрос:

Is it possible for to two equal strings be unequal in Javascript?

Нет .

Как уже упоминалось в комментариях, у вас есть невидимые символы в вашем строки, что делает их неравными при сравнении.

Чтобы решить проблему, удалите невидимые символы любым методом по вашему выбору (я бы рекомендовал не позволять пользователю вводить невидимые символы в первую очередь).

0 голосов
/ 04 августа 2020

Я обнаружил, что одна из этих двух похожих строк содержит какой-то специальный невидимый символ нулевой ширины, называемый Знак порядка байтов (https://www.ionos.com/digitalguide/websites/web-development/byte-order-mark/)

, и мы могли бы вырезать эти символы с помощью регулярного выражения / [^ \ x20- \ x7E] / g как (https://www.w3resource.com/javascript-exercises/javascript-string-exercise-32.php)

Мы могли бы обнаруживать существование невидимого символа с помощью некоторых инструментов, которые показывают символ Юникода (https://qaz.wtf/u/show.cgi?show=a%E2%80%8Bc&type=string)

0 голосов
/ 04 августа 2020

Что такое свойство .length каждой строки?

Если вы выполняете итерацию переменной index по каждой позиции символа от 0 (включительно) до длины (исключая) и печатаете .charCodeAt(index), что вы видите?

При этом вы можете увидеть различия между строками.

...