2016-03-20 33 views
6
var a = 0; 
var b = -a; 

Kiedy zamieścić poniższy kod do konsoli mam true:Dlaczego 0 === -0 jest prawdziwe, ale 1/0 === 1/-0 jest fałszem?

console.log(a === b); // true 

Ale kiedy zrobić kilka obliczeń z nim mam false:

console.log(1/a === 1/b); // false 

Dlaczego tak jest?

+7

Ponieważ 'Infinity' i' -Infinity' nie są równe? – jonrsharpe

+0

@jonrsharpe, matematycznie rzecz biorąc 1/0! = Infinity. Jest niezdefiniowany. –

+5

Nie widzę naprawdę silnego powodu do odrzucenia tego pytania. Tak, jeśli wypróbujesz '1/0' i' 1/-0' w konsoli, zobaczysz 'Infinity' i' -Infinity', a jeśli spojrzysz w specyfikację, przekonasz się, że chociaż '0 'i' -0 "są uważane za równe,' Infinity' i '-Infinity' nie są. Ale jest to złożony obszar, nie wydaje się nierozsądne pytanie o to. –

Odpowiedz

7

To dlatego, że Infinity == -Infinity jest fałszywe, zgodnie z abstrakcyjnym algorytmem porównywania równości.

1/0 przyniesie Infinity w tym samym czasie 1/-0 Daje -Infinity. Więc oba nie są równe, a zatem wracają false.

Powiązane problemy