Om3ga
Om3ga

Reputation: 32823

Why does (true > null) always return true in JavaScript?

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

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

Upvotes: 11

Views: 4116

Answers (7)

leonsas
leonsas

Reputation: 4898

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

Upvotes: 1

Michael Besteck
Michael Besteck

Reputation: 2423

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.

Upvotes: 0

Q2Ftb3k
Q2Ftb3k

Reputation: 688

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.

Upvotes: 2

FabianoLothor
FabianoLothor

Reputation: 2967

The code is incorrect, you need to do:

console.log(true > typeof null);

Upvotes: 0

Esailija
Esailija

Reputation: 140210

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

Upvotes: 7

Mahmoud Abdelaziz
Mahmoud Abdelaziz

Reputation: 117

May be because true = 1 where null = 0

Upvotes: 2

oezi
oezi

Reputation: 51797

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

1 is bigger (>) than 0.

Upvotes: 12

Related Questions