개발자 Saaad

[JavaScript] null 과 undefined 본문

학습/kakao X goorm 풀스택12회차

[JavaScript] null 과 undefined

Saaad 2024. 12. 4. 00:18

null과 undefined 라고 하면 둘 다 값이 없다.. 존재하지 않는다.. 정의되지 않았다..? 

비슷해보이지만 왜 두개로 나뉘어져있는지 몰랐었는데

오늘은 그 차이를 한번 알아보도록 하겠습니다


공통점

  • 둘 다 원시 자료형(Primitive) 입니다.
  • undefined 타입은 undefined 값이 유일하며, null타입은 null 값이 유일합니다.

한번 console.log() 메서드를 이용해 확인해볼까요?

위 결과를 살펴보면 null의 타입은 object, undefined의 타입은 undefined라고 출력되는 것을 확인할 수 있습니다.

 

분명 원시 자료형이라고 했는데 왜 null은 object라고 출력이 될까요?

이유는 초기에 null 의 타입을 object로 지정해놓았는데 너무 오랜 시간이 흘러 타입을 null 로 변경하게 되면

수많은 코드에 큰 영향을 끼칠 수 있어서 변경되지 않은 채 남아있다고 하네요!

 

오래 방치돼서 어쩔 수 없나 봅니다 하하


undefined

  • undefined는 "아무 값도 할당받지 않은 상태"를 의미합니다.
  • var키워드로 선언한 변수는 호이스팅으로 올라간 후 undefined로 초기화 됩니다.
    그 이후 인터프리터가 해당 소스코드에 도달했을 때 할당값이 들어가게 됩니다. 

a 값이 할당되기 전에 호출 됐으나 호이스팅 되어 undefied 할당

  • 변수를 선언하고 값을 할당하지 않은 채 변수를 출력하면 undefined 가 출력 된다.

  • 이렇게 undefined 는 개발자가 의도적으로 할당하기 위한 값이 아닌 자바스크립트 엔진이 변수를 초기화할 때
    사용됩니다. 그래서 개발자가 의도적으로 undefined를 할당하는 것은 권장되지 않습니다.
  • 그래서 변수에 의도적으로 값이 없다고 할 때는 null을 사용합니다.

null

  • null은 "비어있는, 존재하지 않는 값" 을 의미합니다.
  • null은 NULL, Null과는 다른 값입니다. 반드시 null 이라고 해주셔야합니다.
  • 의도적으로 변수에 값이 없다는 것을 명시하기 위해서 undefined가 아닌 null을 사용합니다.
  • null을 할당하면 변수가 이전에 참조하던 값을 명시적으로 참조하지 않겠다고 하는 것이므로, 
    자바스크립트 엔진이 이 변수에 메모리 공간에 대해 가비지 콜렉션(Garbage Collection)을 수행합니다.

(가비지 콜렉션 : 더이상 사용하지 않는 메모리를 자동으로 정리하는 것)

 

 


오늘은 null과 undefined에 대해서 알아봤습니다!

감사합니다!