Javascript String Compare == иногда не удается - PullRequest
28 голосов
/ 14 мая 2009

Как следующий код может иногда принимать значение false?

(transport.responseText == '1' || 
 transport.responseText == 'CARD_VALID')

Мой код JavaScript:

if (transport.responseText == '1' || 
    transport.responseText == 'CARD_VALID') {
    // do something.
}
else if (transport.responseText == 'CARD_INVALID' || 
             transport.responseText == 'INVALID_CHECKSUM') {
    // do something else....
}
else {
    new Ajax.Request('/report_error.php?responseText='+transport.responseText);
    // report error to user
}

Что может заставить сравнение строк JavaScript == возвращать false, если строки идентичны?

Ответы [ 9 ]

46 голосов
/ 26 сентября 2012

Двойное равенство является подходящим способом для сравнения строк в Javascript, он возвращает ложь, тогда могут быть пробелы слева и справа от одной строки.

Поместите .trim() в конец строки, и мое сравнение должно начать работать:

var panel = response.substr(0, response.indexOf("<")).trim();
if(panel == "combo"){
    //do something
}
13 голосов
/ 10 ноября 2009

У меня была похожая проблема, когда две явно идентичные строки не были бы равны, и я вырывал свои волосы, пытаясь ее решить, поэтому я сделал это:

for (var c=0; c<string_1.length; c++) {
    if (string_1.charCodeAt(c) != string_2.charCodeAt(c)) {
        alert('c:'+c+' '+string_1.charCodeAt(c)+'!='+string_2.charCodeAt(c));
        valid = false;
    }
}

И я обнаружил, что последний символ в одной строке был 10, а последний символ в другой был 13, я думал, что обе строки были нулевыми, но это не так.

5 голосов
/ 17 апреля 2017
A1 = "speed"
A2 = "speed" 

if(A1 == A2)  => Error !!!

ИСПОЛЬЗУЙТЕ ЭТОТ ТЕСТ В КОНСОЛИ:

escape("speed")

результат: "скорость"

escape(A1)

результат: "скорость% 0D" => Это проблема% 0D !!!

escape(A2)

результат: "скорость" => ОК !!!

Используйте правильный код:

if(A1.slice(0, -1) == A2) This is OK!
4 голосов
/ 10 ноября 2009

Попробуйте использовать === для точного соответствия (тип и значение). Это рекомендуемый оператор сравнения в JavaScript.

Проверьте типы данных строк, чтобы убедиться, и найдите скрытые символы Юникода или управляющие символы в обеих строках.

2 голосов
/ 12 марта 2019

У меня была такая же проблема, и я заметил, что сравнивал два объекта

enter image description here

, чтобы решить эту проблему, мне пришлось использовать

JSON.stringify(user._id) === JSON.stringify(userId) // true 
2 голосов
/ 14 мая 2009

Попробуйте записать значение responseText в другую переменную перед вводом этого блока кода, если переменная где-то там обновлена.

У меня нет особого опыта непосредственного использования XmlHttpRequest, но я знаю, что в javascript есть несколько мест, где он использует изменчивые ссылки на объекты интерфейса, которые могут изменяться во время выполнения, а не простое значение.

1 голос
/ 03 декабря 2016

Если вы хотите что-то немного менее сложное и имеете дело с ЦИФРОВЫМИ ЗНАЧЕНИЯМИ, используйте

parseFloat()

работает как брелок

0 голосов
/ 11 апреля 2019

Я бы посоветовал вам использовать нормализацию предпочтительно "NFKC" или "NFKD", поскольку они, по-видимому, нормализуют неразрывный пробел в обычном пространстве.

Таким образом, вы можете написать свой код как: -

string1.normalize("NFKC") === string2.normalize("NFKC")
0 голосов
/ 02 июня 2017

Java-сервлет может отправлять строки, т.е.

out.println ( "CARD_VALID");

или

out.print ( "CARD_VALID");

Они могут выглядеть одинаково в Javascript, но в первом случае в конце есть пробелы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...