본문 바로가기

Javascript

undefined vs null_v3.5

(6) undefined와 null

둘 다 없음을 나타내는 값이에요. 하지만 미세하게 다르고, 그 목적 또한 다르답니다. 아래에서 한번 살펴보도록 할께요!

  1. undefined
    1. 사용자(=개발자)가 직접 지정할 수도 있지만 일반적으로는 자바스크립트 엔진에서 값이 있어야 할 것 같은데 없는 경우, 자동으로 부여합니다. 다음 케이스를 생각해 주시면 될 것 같아요.
      1. 변수에 값이 지정되지 않은 경우, 데이터 영역의 메모리 주소를 지정하지 않은 식별자에 접근할 때
      2. .이나 []로 접근하려 할 때, 해당 데이터가 존재하지 않는 경우
      3. return 문이 없거나 호출되지 않는 함수의 실행 결과
      4.  
var a;
console.log(a); // (1) 값을 대입하지 않은 변수에 접근

var obj = { a: 1 };
console.log(obj.a); // 1
console.log(obj.b); // (2) 존재하지 않는 property에 접근
// console.log(b); // 오류 발생

var func = function() { };
var c = func(); // (3) 반환 값이 없는 function
console.log(c); // undefined
  1. 2가지 역할을 가진 undefined, 헷갈릴 만도 해요. 그리고 위험해요!
    1. 지금 undefined로 나오는 이 변수가, 필요에 의해 할당한건지 자바스크립트 엔진이 반환한건지 어떻게 알죠? → 구분할 수 없어요.
    2. ‘없다’를 명시적으로 표현할 때는 undefined를 사용하지 맙시다!
  2. null
    1. 용도 : ‘없다’를 명시적으로 표현할 때
    2. 주의 : typeof null
    3. typeof null이 object인 것은 유명한 javascript 자체 버그입니다. 조심해야겠죠?
    4.  
var n = null;
console.log(typeof n); // object

//동등연산자(equality operator)
console.log(n == undefined); // true
console.log(n == null); // true

//일치연산자(identity operator)
console.log(n === undefined);
console.log(n === null);