2011-09-30 16 views
25

Perché 0 == "" è true in JavaScript? Ho trovato un similar post here, ma perché un numero 0 è simile a una stringa vuota? Naturalmente, 0 === "" è falso.Perché 0 == "" vero in JavaScript

+0

Intendi 0 è "fuso" nella falsa "" è realizzata mediante fusione in falso e l'assegno è falso == false => true –

+0

Per PHP, vedere http: // php. net/manual/it/types.comparisons.php – apscience

+0

Credo che sia perché JavaScript costruisce automagicamente stringhe e numeri in alcuni contesti, l'operatore == è uno di questi contesti e "" costringe a 0. – millimoose

risposta

46
0 == '' 

L'operando di sinistra è del tipo Numero.
L'operando destro è del tipo String.

In questo caso, l'operando di destra è costretto al Numero tipo:

0 == Number('') 

che si traduce in

0 == 0 

Dal astratta uguaglianza Confronto Algoritmo (numero 4) :

Se Type (x) è Number e Type (y) è String, restituisce il risultato di il confronto x == ToNumber (y).

Fonte: http://es5.github.com/#x11.9.3

+0

Grazie, mi aspettavo solo il contrario, lo 0 convertito in stringa e poi falso. –

+0

Sì, d'altra parte questo significa che entrambi sono falsi - come nelle altre risposte, non è del tutto corretto. Perché - come hai dimostrato molto bene - il motivo è "" => 0. Grazie per il tuo supporto! –

+1

@Horst - sì, è giusto. Entrambi sono falsi, come puoi vedere se li usi da soli in 'if (0)' o 'if (" ")', ma nel caso di un confronto '==' questo non è ciò che sta accadendo. (Non sono sicuro del motivo per cui Šime ha lasciato un commento sopra dicendo "Perché entrambi i valori sono falsi"). – nnnnnn

Problemi correlati