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

/* (개발자가 의도적으로) 변수에 값이
   명시적으로나 의도적으로 없음을 나타내는 값 */
let y = null;
console.log(y); // null
<!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>
<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>null 값</title>
    </head>
    <body>
        <h1>null 값</h1>
        <p>
            주로, API에서 객체를 반환할 것으로 예상되지만
            실제로 관련된 객체가 존재하지 않을 때
            null 값을 반환하지만
            jQuery에서는 jQuery 객체를 반환합니다.
            length 프로퍼티를 사용하면, 숫자 0을 반환합니다.
        </p>
        <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
        <script>
            
            const ele = $(".get-class");

            console.log(ele); // jQuery 객체 반환
            console.log(ele.length); // 0
        </script>
    </body>
</html>
let x = null;
console.log(typeof x); // "object"
let x = null;

if (x === null) {
    console.log("변수는 null입니다.");
} else {
    console.log("변수는 null이 아닙니다.");
}
// 출력: "변수는 null입니다."
let x = null;

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

// Boolean() 함수를 사용해서 평가
console.log(Boolean(x)); // false
/* 값이 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("변수가 선언되지 않았습니다.");
}
// 출력: "변수가 선언되지 않았습니다."
/* 변수에 값을 할당하지 않음 */
let x;
console.log(x); // 변수가 값이 할당되지 않았다는 의미로 undefined를 반환

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

null == undefined // true
null === undefined // false
let x = undefined;
let x = null;