2012-07-23 12 views
12

Können mir einige sagen, warum der folgende Code in JavaScript wahr zurückgibt?Warum gibt (true> null) immer True in JavaScript zurück?

console.log(true > null); //returns true 
+14

Ja, weil null ein falscher Ausdruck ist (dann * false *) und der Vergleichsoperator ihn in eine _number_ konvertiert (dann wahr = 1 und falsch = 0). –

+2

** @ Adriano ** Post es als Antwort ist nur das! – elclanrs

+0

http://stackoverflow.com/questions/801032/null-object-in-javascript – diEcho

Antwort

13

null ist wie false in diesem Fall weicht 0 als Zahl ist. true ist 1 als eine Nummer.

1 ist größer (>) als 0.

+0

Danke für die Antwort. Ich habe mich gefragt, warum null === 0 falsch ist? Dann erkannte ich, dass es gezwungen werden muss. Also für diejenigen, die absoluten Beweis benötigen, versuchen Sie + null === 0 was als wahr erweist und beweist, dass in der Tat null zu 0 gezwungen wird. Nur gedacht, das könnte anderen helfen. – GrantVS

2

Kann sein, weil true = 1 wo null = 0

7

Sie in Zahlen umgewandelt werden, null gibt 0 und true1

http://ecma-international.org/ecma-262/5.1/#sec-11.8.5

Wenn es nicht der Fall, dass sowohl Typ (gibt px) ist String und Typ (py) ist String, dann

  1. nx das Ergebnis des Aufrufs ToNumber (px) Es sei. Da px und py sind primitive Werte Bewertungsreihenfolge ist nicht wichtig.
  2. ny das Ergebnis Lassen von ToNumber (py) aufrufen.
Number(null) //0 
Number(true) //1 
0

Der Code ist falsch, was Sie tun müssen:

console.log(true > typeof null); 
+1

Warum denken Sie, dass es falsch ist? – Esailija

2

JavaScript macht eine Menge Art Zwang im Hintergrund und viele der Ergebnisse finden Sie, aren‘ t nützlich (siehe http://wtfjs.com/).

In diesem Fall ist true, das als 1 erzwungen wird, größer als null, das auf 0 erzwungen wird. Da 1 größer als 0 ist, ist das Ergebnis wahr.

Wenn einer der Operanden ist Boolean, wird der Boolesche Operanden 1 umgewandelt, wenn es wahr ist, und 0, wenn es falsch ist.

Von der MDN.

0

Der Vergleichsoperator ">" bewirkt, dass sowohl die linke als auch die rechte Seite in Zahlen umgewandelt wird. Zahl (wahr) ist 1, Zahl (null) ist 0, also wird in der Paranthese als "1> 0" angenommen, was immer im Ergebnis wahr ist.

1

Was dahinter passiert, ist, dass die relationalen Operatoren (> in diesem Fall) vor dem Vergleich Typkompression durchführen. Wenn Sie die ToPrimitive tun, wird True zu einer 1 und Null zu einer 0 gezwungen. Hier können Sie Details überprüfen, wie die Operatoren tatsächlich funktionieren here

Verwandte Themen