06 undefined와 null

undefined

undefined이 부여되는 경우

undefined는 사용자가 명시적으로 지정할 수도 있지만 값이 존재하지 않을 때 자바스크립트 엔진이 자동으로 부여하는 경우도 있다. 아래와 같은 경우가 이에 해당한다.

  • 값을 대입하지 않은 변수, 즉 데이터 영역의 메모리 주소를 지정하지 않은 식별자에 접근할 때
  • 객체 내부의 존재하지 않는 프로퍼티에 접근하려고 할 때
  • return 문이 없어나 호출하지 않는 함수의 실행 결과
// (1) 값을 대입하지 않은 변수에 접근할 때
let a;
console.log(a);  //undefined

//(2) 존재하지 않는 프로퍼티에 접근
const obj = { a: 1 };
console.log(obj.a);  // 1
console.log(obj.b);  // undefined
console.log(b);      // c.f) ReferenceError: b is not defined

// (3) 반환값이 없으면 undefined를 반환한 것으로 간주
const func = () => {};
const c = func();   
console.log(c);      // undefined

undefined와 empty

const arr1 = [];
arr1.length = 3;
console.log(arr1);  // [ empty x 3 ]

const arr2 = new Array(3);
console.log(arr2):  // [ empty x 3 ]

const arr3 = [ undefined, undefined, undefined ];
console.log(arr3);  // [ undefined, undefined, undefined ];

arr1이나 arr2처럼 [ empty x 3 ]가 출력되는 경우는 배열의 값이 들어갈 주소가 확보되었으나 아무런 값도 할당되지 않았음을 의미한다.

const arr = [undefined, 1];
arr.map(v=>console.log(v)); // undefined 1

const arr2 = new Array(3);
arr2.map(v=>console.log(v)); // 아무것도 출력되지  않음
console.log(arr2)            // [ <3 empty items> ]

위의 예시로 보듯이 undefined이 들어간 배열은 순회가 되지만, empty인 경우는 순회 자체가 안된다. undefined은 비어있는 요소라는 값이 할당된 것이지만 empty는 아무런 값도 존재하지 않는 것이기 때문이다.

results matching ""

    No results matching ""