2016-08-07 24 views
3

Ich lerne immer noch die Grundlagen von javaScript und ich verstehe nicht, warum das passiert.Warum falsch == "falsch" ist falsch?

false == false //true 

oder

"false" == "false" //true 

Also, warum false == "false" falsch ist:

Mit Art Zwang false == "false" würde in umgewandelt werden?

+6

weil einer von ihnen ein Boolescher ist und der andere eine Zeichenfolge ist. –

+0

Danke :) :) Ich habe gerade 'true ==" true "' und Ergebnisse 'false' versucht. Sehr schnelle Antwort :) – viery365

+0

Der Datentyp ist unterschiedlich, einer ist boolean und man ist String –

Antwort

16

Sie haben die type conversion rules falsch verstanden. false wird vor dem Vergleich nicht in eine Zeichenfolge konvertiert.

Wenn Type (x) Boolean ist, geben Sie das Ergebnis des Vergleichs ToNumber (x) == y zurück.

false wird in eine Zahl umgewandelt, die gibt:

+0 == "false" 

... dann ...

Wenn Type (x) Anzahl und Typ (y) ist String, kehrt die Ergebnis des Vergleichs x == ToNumber (y).

... "false" wird in eine Zahl umgewandelt, die gibt:

+0 == NaN 

... was falsch ist.

+0

Ist diese Antwort, die ich suchte. Ich muss die Regeln des Typenzwangs besser verstehen. Natürlich denke ich immer daran zu verwenden === aber ich musste das verstehen. Danke :) Ich werde die Antwort in wenigen Minuten annehmen. – viery365

+2

Und daher falsch === "0" würde zu wahr werden. – sahaj

+0

@sahaj Danke!:) Ja, jetzt verstehe ich :) – viery365

4

Die Antwort ist, weil "false" eine Zeichenfolge ist (wie Gerardo Furado in den Kommentaren darauf hingewiesen hat), der Test, den Sie machen, ist gleichbedeutend mit false = "Hallo".

Javascript sucht nicht nach dem Wort in der Zeichenfolge, um festzustellen, ob es sich um einen booleschen Wert handelt, und versuchen dann, den Wert daraus zu ermitteln.

Hinweis:

Im Allgemeinen in Javascript jetzt, dass Sie den === Operator bevorzugt wird, um all dies zu vermeiden.

-2

Dies sind verschiedene Arten von Elementen. "string" und boolean.

So:

false.toString() == "false"