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, когда строки идентичны?
Ответы
Ответ 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")