Подтвердить что ты не робот

Javascript String Compare == иногда терпит неудачу

Как может следующий код иногда оценивать как 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, когда строки идентичны?

4b9b3361

Ответ 1

Double equals - это подходящий способ сравнения строк в Javascript, он возвращает false, тогда может быть пробел слева и справа от одной строки.

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

var panel = response.substr(0, response.indexOf("<")).trim();
if(panel == "combo"){
    //do something
}

Ответ 2

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

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, я думал, что обе строки имеют нулевой конец, но они не были.

Ответ 3

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

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

Ответ 4

A1 = "speed"
A2 = "speed" 

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

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

escape("speed")

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

escape(A1)

result: "speed% 0D" = > Это проблема% 0D!!!

escape(A2)

результат: "speed" = > OK!!!

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

if(A1.slice(0, -1) == A2) This is OK!

Ответ 5

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

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

Ответ 6

Если вам нужно что-то менее сложное и вы имеете дело с ЧИСЛЕННЫМИ ЦЕННОСТЯМИ, используйте

parseFloat()

работает как шарм

Ответ 7

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

enter image description here

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

JSON.stringify(user._id) === JSON.stringify(userId) // true 

Ответ 8

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

out.println( "CARD_VALID" );

или

out.print( "CARD_VALID" );

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

Ответ 9

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

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

string1.normalize("NFKC") === string2.normalize("NFKC")