Qualcuno mi ha inviato questa email:In che modo due stringhe identiche non si equivalgono?
Perché entrambi questi avvisi sono falsi?
alert('a' == 'a');
alert('a' === 'a');
Ecco una demo
Qualcuno mi ha inviato questa email:In che modo due stringhe identiche non si equivalgono?
Perché entrambi questi avvisi sono falsi?
alert('a' == 'a');
alert('a' === 'a');
Ecco una demo
Si tratta di un trucco? Hai generato quelli a's
con qualche magia unicode speciale? Ho eliminato le a's
e ri-digitati loro, e ora entrambi avvisi mostrano true
, come dovrebbero
@tryurbest: entrambi mostrano ancora il vero per me http://jsfiddle.net/sQrST/3/ –
La prima a
di ciascuno non è in realtà un semplice a
. Se posizioni il cursore subito dopo e premi Backspace, cancelli "qualcosa", quindi restituisce true
.
ho copiato la stringa a
, questo è ciò che ottengo quando si esegue questo codice:
$a='a';
var_dump($a);
string(4) "a"
vedere cosa c'è di sbagliato? La lunghezza della stringa è 4.
Inoltre, questo:
echo base64_encode($a);
..returns:
YeKAjA==
Quando, per una semplice stringa con la lettera a
, dovrebbe essere solo YQ==
.
Il carattere extra è chiamato "ZERO WIDTH NON-JOINER".
Per la prima 'a' console dice:
'a'.charCodeAt(0)
97
'a'.charCodeAt(1)
8204
8204 sembra essere un valore Unicode per Zero-width non-joiner
Mentre per il secondo la sua:
'a'.charCodeAt(0)
97
'a'.charCodeAt(1)
NaN
E 'naturale che diversi le stringhe sono diverse :).
Ha-ha ... Sembra di scrivere un altro 'a'-s in un'altra lingua xD –
Copiato e incollato in un file. Visto con editor esadecimale. Sì, una "a" su ciascun lato è 61 E2 80 8C ('a' + un unicode char). –
E2808C è il carattere Unicode 'Zero Width Non-Joiner' ed è invisibile quando non è rilevante per il testo che viene dato. È, tuttavia, abbastanza valido in una stringa. – Rushyo