undefined일 때 비교연산이 되는 경우가 있었다. 이에 대한 경우와 동작을 살펴본다.
==는 타입을 자동으로 변환한 후에 비교한다.undefined == 0 // false
undefined == 1 // false
undefined == NaN // false
undefined == null // true
===는 타입도 같고 값도 같아야 true를 반환한다.undefined === 0 // false
undefined === 1 // false
undefined === undefined // true
숫자로 변환되어 비교된다.NaN이 된다-> Number(undefined) => NaN, NaN은 어떤 수와도 비교할 수 없다.
undefined > 0 // false
undefined < 0 // false
undefined >= 0 // false
undefined <= 0 // false
Number(undefined) // NaN
NaN > 0 // false
NaN < 0 // false
NaN == NaN // false
Number.isNaN()은 정확하게 NaN인 값만 true를 반환한다.
undefined는 타입이 undefined이고, 숫자도 아니며 자기 자신과 같다. 그리고 NaN이 아니라 false를 반환한다.
그렇기에 Number.isNaN(undefined) // false
isNaN(undefined) // true
왜 true냐면, isNaN()는 타입을 먼저 숫자로 변환하기 때문이다.
위와 같은 프로세스를 거치기 때문에 true가 나오는 것이다.
NaN == NaN // false
NaN === NaN // false
undefined == null // true
undefined === null // false
동등 연산자(==, ===)에서 NaN을 각각 할 때 왜 false냐면, NaN은 자기 자신과도 같지 않다라는 성질을 가지고 있기에 비교 시에는 전용 함수(Number.isNaN, isNaN)을 활용해야한다.
undefined와 null의 ==비교는 자바스크립트에서 예외적으로 true를 반환해준다.
다만, undefined === null은 엄격하게 판단한다.
undefined의 타입은 undefined, null의 타입은 object여서 타입이 다르기 때문에 false이다.