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
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
null
ist wie false
in diesem Fall weicht 0
als Zahl ist. true
ist 1
als eine Nummer.
1
ist größer (>
) als 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
Kann sein, weil true = 1
wo null = 0
Sie in Zahlen umgewandelt werden, null
gibt 0
und true
1
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
- nx das Ergebnis des Aufrufs ToNumber (px) Es sei. Da px und py sind primitive Werte Bewertungsreihenfolge ist nicht wichtig.
- ny das Ergebnis Lassen von ToNumber (py) aufrufen.
Number(null) //0
Number(true) //1
Der Code ist falsch, was Sie tun müssen:
console.log(true > typeof null);
Warum denken Sie, dass es falsch ist? – Esailija
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.
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.
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
Ja, weil null ein falscher Ausdruck ist (dann * false *) und der Vergleichsoperator ihn in eine _number_ konvertiert (dann wahr = 1 und falsch = 0). –
** @ Adriano ** Post es als Antwort ist nur das! – elclanrs
http://stackoverflow.com/questions/801032/null-object-in-javascript – diEcho