비교연산자는 피연산자 타입이 다를때 숫자형으로 형변환후 비교한다.
console.log( 'a' > 1 ); --> NaN > 1
'a'가 문자열이므로 숫자로 형변환하면 NaN이되고 NaN과 숫자의 비교연산은 false를 반환한다.
console.log( null == 0 ); // false
위의 규칙을 따르면 null은 숫자로 형변환되어 0이되어 0 == 0이므로 true를 반환해야 한다. 그러나 false를 반환한다.
null과 undefined는 == 동등비교시 숫자로 형변환되지 않는다.
왜 그럴까?
console.log(null == "\n0\n");
만약 null, undefined가 동등비교시 숫자로형변환된다면 위의 경우에도 true를 반환하게 되는 문제점이 발생되기때문에 어쩔수없이 이런 규칙이 생기게 되었다.
console.log( null > 0 ); // false
console.log( Number(null) ); // 0
console.log( Number(undefined) ); // NaN
다른비교연산에서는 숫자로 형변환된다.