둘 다 nullable한 즉 값이 없다는 의미이지만 차이점은 확실히 존재한다
undefined는 js에서 자동으로 할당되는 값임
변수를 선언하고, 아무 값도 할당하지 않는다면 그 변수에 js는 undefined를 자동으로 부여함
ex - let a;라는 변수를 선언만 하고 값을 넣지 않으면, js에 자동으로 a에 undefined라는 값을 할당하게 됨
반면
null은 개발자가 의도적으로 할당하는 값
특정 변수에 값이 없음을 명확히 표현하기 위해 null을 넣을 수 있음
ex - let b = null;이면, b는 일부러 값을 비워놨다는 의도를 나타냄
즉, undefined는 값을 아직 할당하지 않은 상태 / JS가 자동으로 부여하는 값
반면
null은 의도적으로 값을 비워 둔 상태, 개발자가 직접 할당한 값
그래서 느슨한 비교인 ==에선 null 과 undefined가 같게 처리되어도,
엄격한 비교 연산자 === 에선 다르게 취급됨
========================================
null은 개발자가 명시적으로 메모리를 해제하고자 할 때 사용하는 방법
객체를 참조하던 변수를 null설정 시, 해당 변수는 더 이상 그 객체를 가리키지 않아 참조가 끊어짐
이렇게 참조가 끊기면 JS의 가비지 컬렉터는 이 객체가 더 이상 사용되지 않는다고 판단해 메모리에서 이를 제거함
ex - 디용량 데이터를 담는 객체가 있을 때, 더 이상 사용하지 않는다면 그 객체를 null로 설정해서 가비지 컬렉션 대상이 되도록 유도시킬 수 있음
반면 undefined는 js 엔진이 자동으로 할당하는 값으로, 메모리 해제와 직접적인 관련 없음
변수가 undefined여도 가비지 컬렉션 대상이 되지 않고, 이 값 자체가 메모리 해제를 유도하지도 않음
단지 값이 정의되지 않음을 나타낼 뿐이고, undefined로 설정한다해서 js가 해제 대상으로 인식하지도 않음