둘 다 "값 없음"을 나타내지만, 의도와 출처가 다릅니다.
undefined: 값의 부재이며, 보통 JavaScript 엔진이 설정합니다 — 선언만 되고 할당되지 않은 변수, 존재하지 않는 객체 속성, 전달하지 않은 함수 매개변수, 또는return이 없는 함수.null: 의도적인 "비어있음" 값으로, "여기에는 일부러 아무것도 없다"고 말하기 위해 당신이 할당합니다.
둘 다 "값 없음"을 나타내지만, 의도와 출처가 다릅니다.
undefined: 값의 부재이며, 보통 JavaScript 엔진이 설정합니다 — 선언만 되고 할당되지 않은 변수, 존재하지 않는 객체 속성, 전달하지 않은 함수 매개변수, 또는 return이 없는 함수.null: 의도적인 "비어있음" 값으로, "여기에는 일부러 아무것도 없다"고 말하기 위해 당신이 할당합니다.let a; // undefined — 선언했으나 할당하지 않음
const obj = {};
obj.missing; // undefined — 속성이 존재하지 않음
function f() {}
f(); // undefined — return 없음
const b = null; // null — 비우기로 선택함
null == undefined; // true — 느슨한 동등 비교는 둘을 같다고 본다
null === undefined; // false — 타입이 다르다
typeof undefined; // "undefined"
typeof null; // "object" (역사적 버그)
const value = input ?? "default"; // null이든 undefined든 기본값 적용
user?.address?.city; // 옵셔널 체이닝 — 어느 링크든 null/undefined면 undefined
값을 의도적으로 비울 때는 **null**을 사용하고(예: "선택된 사용자 없음"), **undefined**는 "아직 설정되지 않음"으로 취급하세요. ??(널 병합)와 ?.(옵셔널 체이닝) 연산자는 둘을 한 번에 처리하므로 널리 사용됩니다.