undefined는 변수가 선언되었지만 아직 값이 할당되지 않은 상태를 나타냅니다. 즉, 변수는 존재하지만 그 값이 정의되지 않았을 때 'undefined'가 됩니다. JavaScript에서는 변수를 선언하고 초기화하지 않으면 자동으로 'undefined' 값을 할당합니다.
let myVar;
console.log(myVar); // undefined
null은 변수에 값이 없음을 명시적으로 표시하고 싶을 때 사용하는 특수한 값입니다. 'null'을 할당하면 변수에 아무런 값도 없음을 의미하며, 이는 'undefined'와는 다릅니다. 'null'은 프로그래머가 의도적으로 설정하는 '아무것도 없음'을 표현합니다.
let myVar = null;
console.log(myVar); // null
undeclared는 변수 자체가 선언되지 않은 상태를 나타냅니다. 즉, 어떤 변수가 코드 내에서 한 번도 선언되지 않았을 때 그 변수는 'undeclared' 상태가 됩니다. 이 상태의 변수를 사용하려고 하면 JavaScript는 ReferenceError를 발생시킵니다.
console.log(myVar); // ReferenceError: myVar is not defined
이렇게 보면, 'undefined'는 선언은 되었지만 값이 할당되지 않은 변수의 상태, 'null'은 값이 명시적으로 비어 있음을 나타내는 특수한 값, 'undeclared'는 변수 자체가 선언되지 않은 상태를 각각 나타냅니다.