[Javascript] undefined와 비교연산

Dev_sheep·2025년 6월 7일

undefined일 때 비교연산이 되는 경우가 있었다. 이에 대한 경우와 동작을 살펴본다.

1. ==와 ===의 비교

  • ==는 타입을 자동으로 변환한 후에 비교한다.
undefined == 0 // false
undefined == 1 // false
undefined == NaN // false
undefined == null // true
  • ===는 타입도 같고 값도 같아야 true를 반환한다.
undefined === 0 // false
undefined === 1 // false
undefined === undefined // true

2. 비교연산자(<, >, <=, >=)

  • 이 경우에는 숫자로 변환되어 비교된다.

* undefined는 숫자로 변환되면 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

3. isNaN(), Number.isNaN()

  • Number.isNaN()은 정확하게 NaN인 값만 true를 반환한다.
    undefined는 타입이 undefined이고, 숫자도 아니며 자기 자신과 같다. 그리고 NaN이 아니라 false를 반환한다.

  • 그렇기에 Number.isNaN(undefined) // false

  • isNaN(undefined) // true

  • 왜 true냐면, isNaN()는 타입을 먼저 숫자로 변환하기 때문이다.

    1. Number(undefined) // NaN
    2. isNaN(NaN) // true
  • 위와 같은 프로세스를 거치기 때문에 true가 나오는 것이다.

4. 추가 궁금증

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이다.

profile
기록과 공유

0개의 댓글