개발자 Saaad
[JavaScript] null 과 undefined 본문
null과 undefined 라고 하면 둘 다 값이 없다.. 존재하지 않는다.. 정의되지 않았다..?
비슷해보이지만 왜 두개로 나뉘어져있는지 몰랐었는데
오늘은 그 차이를 한번 알아보도록 하겠습니다
공통점
- 둘 다 원시 자료형(Primitive) 입니다.
- undefined 타입은 undefined 값이 유일하며, null타입은 null 값이 유일합니다.
한번 console.log() 메서드를 이용해 확인해볼까요?
위 결과를 살펴보면 null의 타입은 object, undefined의 타입은 undefined라고 출력되는 것을 확인할 수 있습니다.
분명 원시 자료형이라고 했는데 왜 null은 object라고 출력이 될까요?
이유는 초기에 null 의 타입을 object로 지정해놓았는데 너무 오랜 시간이 흘러 타입을 null 로 변경하게 되면
수많은 코드에 큰 영향을 끼칠 수 있어서 변경되지 않은 채 남아있다고 하네요!
오래 방치돼서 어쩔 수 없나 봅니다 하하
undefined
- undefined는 "아무 값도 할당받지 않은 상태"를 의미합니다.
- var키워드로 선언한 변수는 호이스팅으로 올라간 후 undefined로 초기화 됩니다.
그 이후 인터프리터가 해당 소스코드에 도달했을 때 할당값이 들어가게 됩니다.
- 변수를 선언하고 값을 할당하지 않은 채 변수를 출력하면 undefined 가 출력 된다.
- 이렇게 undefined 는 개발자가 의도적으로 할당하기 위한 값이 아닌 자바스크립트 엔진이 변수를 초기화할 때
사용됩니다. 그래서 개발자가 의도적으로 undefined를 할당하는 것은 권장되지 않습니다. - 그래서 변수에 의도적으로 값이 없다고 할 때는 null을 사용합니다.
null
- null은 "비어있는, 존재하지 않는 값" 을 의미합니다.
- null은 NULL, Null과는 다른 값입니다. 반드시 null 이라고 해주셔야합니다.
- 의도적으로 변수에 값이 없다는 것을 명시하기 위해서 undefined가 아닌 null을 사용합니다.
- null을 할당하면 변수가 이전에 참조하던 값을 명시적으로 참조하지 않겠다고 하는 것이므로,
자바스크립트 엔진이 이 변수에 메모리 공간에 대해 가비지 콜렉션(Garbage Collection)을 수행합니다.
(가비지 콜렉션 : 더이상 사용하지 않는 메모리를 자동으로 정리하는 것)
오늘은 null과 undefined에 대해서 알아봤습니다!
감사합니다!
'학습 > kakao X goorm 풀스택12회차' 카테고리의 다른 글
[JavaScript] 얕은 복사, 깊은 복사 (0) | 2024.12.06 |
---|---|
[JavaScript] 얕은 비교, 깊은 비교 (0) | 2024.12.05 |
[JavaScript] Map, Filter, Reduce (0) | 2024.12.03 |
[JavaScript] 전개 연산자 (Spread Operator) (0) | 2024.12.02 |
[JavaScript] 함수 표현식, 선언문 (0) | 2024.12.02 |