Can some tell me why the following code returns true in JavaScript?
console.log(true > null); //returns true
Can some tell me why the following code returns true in JavaScript?
console.log(true > null); //returns true
null is like false in this case, wich is 0 as a number. true is 1 as a number.
1 is bigger (>) than 0.
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
- Let nx be the result of calling ToNumber(px). Because px and py are primitive values evaluation order is not important.
- Let ny be the result of calling ToNumber(py).
Number(null) //0
Number(true) //1
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.
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