Your real question seem to be:
Why:
null >= 0; // true
But:
null == 0; // false
What really happens is that the Greater-than-or-equal Operator (>=
), performs type coercion (ToPrimitive
), with a hint type of Number
, actually all the relational operators have this behavior.
null
is treated in a special way by the Equals Operator (==
). In a brief, it only coerces to undefined
:
null == null; // true
null == undefined; // true
Value such as false
, ''
, '0'
, and []
are subject to numeric type coercion, all of them coerce to zero.
You can see the inner details of this process in the The Abstract Equality Comparison Algorithm and The Abstract Relational Comparison Algorithm.
In Summary:
-
Relational Comparison: if both values are not type String,
ToNumber
is called on both. This is the same as adding a+
in front, which for null coerces to0
. -
Equality Comparison: only calls
ToNumber
on Strings, Numbers, and Booleans.