2011-09-30 25 views
25

Dlaczego jest 0 == "" prawdziwe w JavaScript? Znalazłem similar post here, ale dlaczego numer 0 jest podobny do pustego ciągu? Oczywiście, 0 === "" jest fałszywe.Dlaczego 0 == "" prawda w JavaScript

+0

To znaczy, 0 jest "lanego" fałszywie "" jest odlewane w fałszywe i czek jest fałszywy == false => true –

+0

dla PHP, zobacz http: // php. net/manual/pl/types.comparisons.php – apscience

+0

Wierzę, że to dlatego, że JavaScript automagicznie wymusza łańcuchy i liczby w niektórych kontekstach, operator == jest jednym z tych kontekstów, a "" wymusza na 0. – millimoose

Odpowiedz

46
0 == '' 

Lewy operand jest typu Numer.
Prawy operand jest typu String.

W tym przypadku prawo operand jest zmuszany do Numer typu:

0 == Number('') 

co skutkuje

0 == 0 

Od Streszczenie Równości Algorytm Porównanie (numer 4) :

Jeśli Typ (x) jest liczbą i typem (y) jest łańcuchem, zwróć wynik porównania: x == ToNumber (y).

Źródło: http://es5.github.com/#x11.9.3

+0

Dzięki, po prostu spodziewałem się tego na odwrót, 0 skonwertowałem na ciąg znaków, a następnie na fałsz. –

+0

Tak, z drugiej strony oznacza to, że mówienie obydwu jest fałszywe - tak jak w przypadku innych odpowiedzi, nie jest całkiem poprawne. Ponieważ - jak dobrze pokazałeś - powodem jest to, że "" => 0. Dzięki za wsparcie! –

+1

@Horst - tak, zgadza się. Oba _jest_ falsy, jak widać, jeśli użyjesz ich sam w 'if (0)' lub 'if (" ")', ale w przypadku '==' porównania, to nie jest to, co się dzieje. (Nie jestem pewna, dlaczego Šime zostawił komentarz powyżej, mówiąc "Ponieważ obie wartości są fałszywe".) – nnnnnn