javascript - strings - js triple equal
Javascript String Compare== a veces falla (7)
Dobles iguales es la forma adecuada de comparar cadenas en Javascript, está devolviendo falso, entonces puede haber espacios en blanco a la izquierda o derecha de una cadena.
Pon un .trim()
en el final de las cadenas y mi comparación debería comenzar a funcionar:
var panel = response.substr(0, response.indexOf("<")).trim();
if(panel == "combo"){
//do something
}
¿Cómo podría el siguiente código a veces ser falso?
(transport.responseText == ''1'' ||
transport.responseText == ''CARD_VALID'')
Mi código de 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
}
¿Qué podría hacer que la comparación de cadenas de JavaScript ==
devuelva falso cuando las cadenas son idénticas?
Intente capturar el valor de responseText
en una variable diferente antes de ingresar ese bloque de código, en caso de que la variable se actualice en algún lugar allí.
No tengo mucha experiencia usando XmlHttpRequest directamente, pero sí sé que javascript tiene una serie de lugares donde utiliza referencias volátiles para objetos de interfaz que pueden cambiar durante la ejecución, en lugar de un simple valor.
Intente usar ===
para hacer coincidir exactamente (tipo y valor). Este es el operador de comparación recomendado en javascript.
Verifique los tipos de datos de las cadenas para asegurarse, y busque caracteres Unicode o de control ocultos en ambas cadenas.
Java servlet puede enviar cadenas, es decir
out.println ("CARD_VALID");
o
out.print ("CARD_VALID");
Estos pueden parecer idénticos en Javascript, pero hay espacios en blanco al final en el primer caso.
Si desea algo un poco menos complicado y está tratando con VALORES NUMÉRICOS, use
parseFloat()
Funciona de maravilla
Tuve un problema similar en el que dos cuerdas obviamente idénticas no serían iguales, y me estaba arrancando el pelo tratando de resolverlo, así que hice esto:
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;
}
}
Y encontré que el último carácter en una cadena era 10, y el último carácter en la otra era 13, pensé que ambas cadenas estaban terminadas en nulo, pero no lo eran.
A1 = "speed"
A2 = "speed"
if(A1 == A2) => Error !!!
UTILICE ESTA PRUEBA EN LA CONSOLA:
escape("speed")
resultado: "velocidad"
escape(A1)
resultado: "speed% 0D" => Este es el problema% 0D !!!
escape(A2)
resultado: "speed" => OK !!!
Usa el código correcto:
if(A1.slice(0, -1) == A2) This is OK!