10-1. null 과 undefined의 정의와 예시

10-1-1. null

null은 어떤 값이 의도적으로 비어있음을 표현하며 불리언 연산에서는 거짓으로 취급된다. 변수는 존재하나null로 (값이) 할당된 상태, 즉 null은 자료형이 정해진 상태이다. 또한 식별되지 않아 변수가 아무런 객체를 가리키지 않음을 표현한다. [1]

// 정의되지 않고 초기화된 적도 없는 a
a; // ReferenceError: a is not defined

// 존재하지만 값이나 자료형이 존재하지 않는 a
var a = null;
a; // null

함수가 유효한 값을 반환할 수 없는 경우, 명시적으로 null을 반환한다. 예를 들어 조건에 부합하는 HTML 요소를 검색해 반환하는 document.querySelector() 또는 getElementById()는 조건에 부합하는 HTML 요소를 검색할 수 없는 경우, null을 반환한다.

var garage = document.querySelector('.myCar');
console.log(garage); // null

var garage = document.getElementById('#myCar');
console.log(garage); // null

또한 두 번째 매개변수로 배열을 전달하면 그 요소들을 차례대로 인수로 사용하는 apply 함수를 이용한 최댓값(Math.max)과 최솟값(Math.min)을 구하는 요소로도 쓰인다. 첫 번째 파라미터에 null을 넣어준 뒤 배열의 요소들을 입력하면 최댓값 혹은 최솟값이 나오게 된다.

Math.max.apply(null, [1, 2, 3]); // -> 3
Math.min.apply(null, [1, 2, 3]); // -> 1

10-1-2. undefined

undefined는 값이 없다는 것을 확인하는 값이다. 변수는 존재하나 어떠한 값도 할당받지 않아 자료형이 정해지지 않은 상태이다. 또한 메서드와 선언도 평가할 변수가 값을 할당받지 않은 경우에 undefined를 반환한다. 함수는 값을 명시적으로 반환하지 않으면 undefined를 반환한다.

var a;
console.log(a); // undefined

// 파라미터가 있는 함수를 호출
function a(x) {
    console.log(x); // undefined
}

a(); // undefined