11

Can some tell me why the following code returns true in JavaScript?

console.log(true > null); //returns true
Bill the Lizard
  • 398,270
  • 210
  • 566
  • 880
Om3ga
  • 30,465
  • 43
  • 141
  • 221

7 Answers7

12

null is like false in this case, wich is 0 as a number. true is 1 as a number.

1 is bigger (>) than 0.

oezi
  • 51,017
  • 10
  • 98
  • 115
  • Thanks for the answer. I was wondering why is null === 0 false? Then I realised it needs to be coerced. So for those who need absolute proof, try + null === 0 which evaluates to true proving that indeed null is coerced to 0. Just thought this might help others. – GrantVS Oct 15 '13 at 11:16
7

They are converted to numbers, null gives 0 and true gives 1

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

If it is not the case that both Type(px) is String and Type(py) is String, then

  1. Let nx be the result of calling ToNumber(px). Because px and py are primitive values evaluation order is not important.
  2. Let ny be the result of calling ToNumber(py).
Number(null) //0
Number(true) //1
Esailija
  • 138,174
  • 23
  • 272
  • 326
2

May be because true = 1 where null = 0

Mahmoud Abdelaziz
  • 117
  • 1
  • 1
  • 9
2

JavaScript does a lot of type coercion in the background and a lot of the results you'll find aren't useful (see http://wtfjs.com/).

In this case, true which is coerced as 1 is greater than null which is coerced to 0. Since 1 is greater than 0 the result is true.

If one of the operands is Boolean, the Boolean operand is converted to 1 if it is true and +0 if it is false.

From the MDN.

Q2Ftb3k
  • 678
  • 3
  • 9
  • 18
1

What's happening behind is that the relational operators ( > in this case) perform type coercion before doing the comparison. When doing the ToPrimitive, true gets coerced to a 1, and null to a 0. You can check details here of how the operators actually work here

leonsas
  • 4,718
  • 6
  • 43
  • 70
0

The code is incorrect, you need to do:

console.log(true > typeof null);
FabianoLothor
  • 2,752
  • 4
  • 25
  • 39
0

The compare operator ">" forces both it's left and right side to be converted to numbers. Number(true) is 1, Number(null) is 0, so what is in the paranthesis is taken as "1>0", which is always true in result.

Michael Besteck
  • 2,415
  • 18
  • 10