Alguien me envió este correo electrónico:¿Cómo dos cadenas idénticas no se igualan?
¿Por qué estas dos alertas a falso?
alert('a' == 'a');
alert('a' === 'a');
He aquí una demostración
Alguien me envió este correo electrónico:¿Cómo dos cadenas idénticas no se igualan?
¿Por qué estas dos alertas a falso?
alert('a' == 'a');
alert('a' === 'a');
He aquí una demostración
Es esto un truco? ¿Generaste esos a's
con alguna magia Unicode especial? He eliminado las a's
y re-escrito ellos, y ahora ambos se mostrarán las alertas true
, como deberían
@tryurbest - aún así ambos se muestran verdaderos para mí http://jsfiddle.net/sQrST/3/ –
La primera a
de cada uno no es en realidad un simple a
. Si coloca el cursor justo detrás de él y pulsa Retroceso, elimina "algo" y luego devuelve true
.
copié la cadena de a
, esto es lo que me pasa cuando se ejecuta este código:
$a='a';
var_dump($a);
string(4) "a"
ver lo que está mal aquí? La longitud de la cadena es 4.
Por otra parte, esto:
echo base64_encode($a);
..returns:
YeKAjA==
Cuando, por una simple cadena con la letra a
, sólo debería ser YQ==
.
El carácter extra se llama "ZERO WIDTH NON-JOINER".
Por primera 'a' de la consola dice:
'a'.charCodeAt(0)
97
'a'.charCodeAt(1)
8204
8204 parece ser un valor Unicode para Zero-width non-joiner
Mientras que para la segunda su:
'a'.charCodeAt(0)
97
'a'.charCodeAt(1)
NaN
Es natural que diferentes las cadenas son diferentes :).
Ha-ha ... Parece que escribe otro 'a'-s en otro idioma xD –
Copiado y pegado en un archivo. Visto con editor hexadecimal. Sí, una 'a' en cada lado es 61 E2 80 8C ('a' + algo de char unicode). –
E2808C es el carácter Unicode 'Zero Width Non-Joiner' y es invisible cuando no es relevante para el texto. Sin embargo, es bastante válido en una cadena. – Rushyo