/* 변수에 값을 할당하지 않음 */
let x;
console.log(x); // 변수가 값이 할당되지 않았다는 의미로 undefined를 반환

/* (개발자가 의도적으로) 변수에 값이
   명시적으로나 의도적으로 없음을 나타내는 값 */
let y = null;
console.log(y); // null
let x; // undefined 값
console.log(typeof x); // "undefined"

let y = null; // null 값
console.log(typeof y); // "object"
/* 값이 undefined인 변수 x */
let x;

if (x) {
    console.log("true로 평가됩니다.");
} else {
    console.log("false로 평가됩니다.");
}
// 출력: "false로 평가됩니다."

// Boolean() 함수를 사용해서 평가
console.log(Boolean(x)); // false

/* 값이 null인 변수 y */
let y = null;

if (y === null) {
    console.log("변수는 null입니다.");
} else {
    console.log("변수는 null이 아닙니다.");
}
// 출력: "변수는 null입니다."
let x = undefined;
let x = null;
/* 변수에 값이 할당되었는지 확인하는 함수 */
let validationVar = (v) => {
    if (v === undefined) {
        return "변수에 값이 할당되지 않았습니다.";
    }
    return v;    
}

let x;

console.log(validationVar(x)); // 출력: "변수에 값이 할당되지 않았습니다."
<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>null 값</title>
    </head>
    <body>
        <h1>null 값</h1>
        <p>
            주로, API에서 객체를 반환할 것으로 예상되지만
            실제로 관련된 객체가 존재하지 않을 때
            null 값을 반환합니다.
        </p>
        <script>
            const ele = document.querySelector(".get-class");

            /* HTML 문서에
               get-class라는 클래스 이름을 가진 요소가 없으면
               null을 반환 */
            console.log(ele); // null
        </script>
    </body>
</html>
/* 값이 undefined인 변수 x */
let x;

if (x === undefined) {
    console.log("true로 평가됩니다.");
} else {
    console.log("false로 평가됩니다.");
}
// 출력: "true로 평가됩니다."

/* 선언되지 않은 변수 */
if (y === undefined) { // Uncaught ReferenceError: y is not defined

}
/* 값이 할당되지 않은 변수 x */
let x;

if (x === undefined) {
    console.log("true로 평가됩니다.");
} else {
    console.log("false로 평가됩니다.");
}
// 출력: "true로 평가됩니다."

/* 선언되지 않은 변수 y */
try {
    y; // 변수에 접근 시도
    console.log('변수가 선언되었습니다.');

} catch (error) {
    console.log('변수가 선언되지 않았습니다.'); 
}
// 출력: "변수가 선언되지 않았습니다."
/* 값이 null인 변수 x */
let x = null;

if (x === null) {
    console.log("true로 평가됩니다.");
} else {
    console.log("false로 평가됩니다.");
}
// 출력: "true로 평가됩니다."

/* 선언되지 않은 변수 y */
if (y === null) { // Uncaught ReferenceError: y is not defined

}
/* 값이 null인 변수 x */
let x = null;

if (x === null) {
    console.log("true로 평가됩니다.");
} else {
    console.log("false로 평가됩니다.");
}
// 출력: "true로 평가됩니다."

/* y 변수가 선언되었는지 확인 */
if (typeof y !== "undefined") {
    // 변수가 선언되었을 때 null 값인지 확인
    if (myVariable === null) {
        console.log("변수는 null입니다.");
    } else {
        console.log("변수는 null이 아닙니다.");
    }
} else {
    console.log("변수가 선언되지 않았습니다.");
}
// 출력: "변수가 선언되지 않았습니다."