JS null, undefined 차이점에 대해 알아보자

POLO·2023년 12월 20일
post-thumbnail

null, undefined 차이점

들어가기 전..

null과 undefined는 언뜻 보면 값이 비어 있다라는 의미를 똑같이 지니고 있는 것으로 보입니다.

주로 null은 변수에 할당 필요한 값이 아직 미정일 때 사용했었고,
undefined는 변수에 할당하는 용도로는 사용한 적이 없으며
'undefined한 변수에 접근하고 있습니다.' 라는 에러 내용을 통해 자주 접했습니다.

지금까지의 경험으로 봤을 때, null은 변수가 아직은 비어있음을, undefined는 아직 정의되지 않은 변수에 접근 시에 표시되는 값으로 보이는데요.

과연 맞는지 한 번 알아봅시다!

null

null은 Primitive값 중 하나인 Literal값으로, 부울 연산 수행 시 false로 표현되며, 의도적으로 값이 비어있음을 의미할 때 사용합니다.

Primitive값 (원시값)
객체가 아닌 어떠한 메서드 또는 속성도 가지지 않는 데이터로, 컴퓨터에 친화적인 저수준 언어입니다. Primitive값은 불변성을 가지기 때문에 값을 변형할 수 없습니다. (ex. null = "null 입니다.")

Literal(리터럴)
불변성을 지녔기 때문에 변경이 불가능한 값입니다. 리터럴 종류에는 문자열, 불리언, 숫자 등이 있습니다.

즉, null값이 할당된 변수는 아무런 객체도 가르키지 않는다는 것을 의미합니다.

null은 예약어로 등록되어 있기 때문에 변수나 함수이름으로 사용할 수 없습니다.

예약어
자바스크립트에서 실제 구문을 구성하는 단어로 변수나 함수을 식별하는 식별자로 사용할 수 없습니다.

undefined

undefined는 Primitive값 중 하나인 Literal값으로, 부울 연산 수행 시 false로 표현되며, 값을 할당하지 않은 변수에 접근할 때 return되는 값입니다.

함수에서 아무런 값도 return하지 않을 때에 return되는 값이기도 합니다.

undefined는 전역 객체의 속성으로서 전역 범위에서는 식별자로 사용할 수 없지만 그 외의 범위에서는 에약어로 등록되어 있지 않아 식별자로 사용할 수 있으나 코드 유지보수가 어려워질 수 있어 undefined를 식별자로 사용하는 것은 권장되지 않습니다.

차이점

  1. 예약어인가?
    null은 예약어이고, undefined는 예약어가 아닙니다.
    따라서 null은 키워드로 사용할 수 없고, undefined는 전역 범위 외의 범위에서는 키워드로 사용할 수 있습니다.

  2. Number() 함수를 사용해 숫자로 변경 시 어떤 값으로 변경되는가?
    null은 0으로 변경되고, undefined는 NaN으로 변경됩니다.
    null은 빈 값이기 때문에 0으로 치환되고, undefined는 없는 값이기 때문에 NaN으로 치환됩니다.

  1. typeof 연산자를 사용하면 어떤 자료형으로 나타나는가?
    null은 object로, undefined는 undefined로 나타납니다.

    typeof null 실행 시 출력되는 object는 자바스크립트 구현 버그로 보고 있습니다.
    null은 Primitive값이기 때문에 어떤 객체도 아니어야 하는데 object로 표시되기 때문입니다.

요약

null은 변수가 비어있다는 걸 의도적으로 나타내기 위한 값으로 사용하고,
undefined는 값이 할당되지 않은 변수에 접근할 때 반환되는 값입니다.

0개의 댓글