## undefined와 null null과 undefined 모두 '값이 없음'을 나타내지만 의미와 사용 목적이 다르다. ## undefined undefined는 **값이 할당되지 않은 상태**를 의미한다. - 변수를 선언만 하고 값을 할당하지 않았을 때 - 함수에서 명시적으로 값을 반환하지 않았을 때 - 객체에 존재하지 않는 프로퍼티에 접근했을 때 - 함수 매개변수에 값을 전달하지 않았을 때 이런 경우에 **엔진이 자동으로 할당하는 값**이 undefined이다. - 변수나 프로퍼티가 정의되엇는지 확인할 때 - 함수 매개변수의 기본값을 설정할 때 - 옵셔널 체이닝으로 안전하게 프로퍼티에 접근할 때 이런 상황에서 undefined를 활용할 수 있다. ## null null은 **값이 없음을 의도적으로 나타내는 상태**이다. undefined와는 다르게 null은 **개발자가 직접 할당하는 값**이고, 보통 - 명시적으로 값이 없음을 표현하고 싶을 때 - 객체를 초기화 할 때 빈 값으로 설정해야 하는 경우 - API 응답에서 값이 없음을 명시적으로 표현할 때 이런 상황에서 주로 null을 할당한다. - 객체 참조를 명시적으로 해제해서 가비지 컬렉션의 대상으로 만들거나 - API의 빈 값을 명시적으로 표현하거나 - 변수의 초기값으로 사용해서 나중에 실제 값이 할당될 것임을 암시해야 하는 경우 이런 상황에서 null을 활용할 수 있다. ## 타입과 동등성 비교 ```javascript typeof undefined // "undefined" typeof null // "object" (JavaScript의 유명한 버그) undefined == null // true (느슨한 비교) undefined === null // false (엄격한 비교) ``` <!--todo: typeof null 의 결과가 object가 나오는 것은 실수일까 의도일까 --> > [!note]- 실제 실행 결과 > ![[39cd4546-f600-428b-97ac-7cd37f017408.png]] > ![[4a78f065-9aca-481b-a8ef-d08e7a5288d7.png]] ## best practice - null과 undefined를 일관성 있게 사용하되 undefined는 엔진이 자동으로 할당하는 방향, null은 개발자가 직접 할당하는 방향으로 사용하는 것이 좋다 - 타입 체크할 때 엄격한 비교(`===`)를 사용하는 것이 좋다.