본문으로 바로가기

undefined와 null의 차이점

category JavaScript/Core & 개념ㆍ용어 2016. 9. 29. 08:58

undefined vs null




이 두 타입은 모두 자바스크립트에서 '값이 없음'을 나타냅니다.

기본적으로 값이 할당되지 않은 변수는 undefined 타입이며,  undefined 타입은 변수 자체의 값 또한 undefined 입니다.

즉, 정의되지 않은 것, 초기화되어 있지 않거나 존재하지 않는 객체의 프로퍼티 및 존재하지 않는 배열의 원소값에 접근하려고 할때 얻어지는 변수의 값입니다


결론적으로  undefined는 데이터 타입이자, 값을 나타냅니다.

var jaehee;  와 같이 변수를 선언하면 jaehee 변수에 undefined를 할당하게 됩니다.

여기서 중요한 것이 변수의 초깃값이 undefined라는 점이다. 비록 변수만 선언했지만 값을 가진다는 말입니다.

그렇기 때문에 값이면서 데이터 타입인 것입니다.


이에 반해 null 타입 변수의 경우는 명시적으로 값이 비어있음을 나타내는데 사용합니다.

다시 말해서, 아무것도 참조하고 있지 않다라는 의미가 담겨 있으며 주로 객체를 담을 변수를 초기화할 때 많이 사용합니다.

하지만 null 역시 undefined와 마찬가지로 값이며 데이터 타입입니다.

분명한 차이점은 undefined는 변수를 선언만 하더라도 할당되지만 null은 변수를 선언한 후에 null로 값을 바꾼다는 점입니다.


var nullVar = null;    // null 타입 변수를 생성


보통 아무 값도 갖지않음을 나타낼때 사용합니다.

즉, 특별한 값을 평가하는 키워드인 셈이다. 값은 값인데 비어있는 값(아무런 값이 아닌 값)으로 이해하면 됩니다.

실제로 null은 전형적인 고유 값이며 객체, 숫자, 문자열에서 '값이 없음'을 no value를 가리킬때  사용 할 수 있습니다.


null 과 undefined 는 등록, 저장 여부이다.

null 은 값은 값이지만 값으로써 의미없는 특별한 값이 등록되어 있는 것이고, undefined 는 등록이 되어있지 않기 때문에 초기화도 정의되지도 않은 것입니다.

undefined 는 미리 선언된 전역변수(전역 객체의 프로퍼티)이며, null 은 선언,등록을 하는 키워드인 것입니다.



이런 차이에도 불구하고 null 과 undefined 는 포괄적으로 둘다 값이 없음을  가리키고, 사용할때 서로 바꿔 사용하는 경우도 있습니다.

동등연산자(==)를 사용하면 두 값이 같다고 간주하기 때문에 이를 구별하기 위해서는 엄격한 일치연산자(===)를 사용할 것을 권장합니다.


또한 typeof null 은 object 라는 것에 주의해야 합니다.


아래 코드를 살펴보겠습니다.


var nullVar = null;

console.log( typeof nullVar === null );
// false

console.log( nullVar === null );
// true




null 값으로 데이터를 초기화하는 경우


// Number 변수 초기화
var data1 = 0;

// String 변수 초기화
var data2 = "";

// Boolean 변수 초기화
var data3 = false;

// Object 변수 초기화
var data4 = null;


일반적으로 초기화와 동시에 변수를 할당하게 되는데 이때 할당된 초깃값을 통해 이 변수가 어떤 데이터형을 저장할 변수인지을 가늠할 수 있습니다.


가령, data3 = false 의 경우에 할당된 초기값이 false 인 것으로 보아 이 변수에는 true 또는 false 가 저장될 것을 알 수 있습니다. 

예외적으로 다른 데이터형인 문자열등... 이 들어갈 수도 있지만 대개는 그런 예측가능하지 않은 값을 넣지는 않습니다.


위의 코드에서처럼 초깃값으로 null 을 넣어다는 의미는 소스코드 어디에선가 이 변수에 클래스의 인스턴스를 대입할 거라는 것을 알 수 있습니다.


data4 = new FnClass();





Jaehee's WebClub



댓글을 달아 주세요

  1. BlogIcon 저대로하등가 2016.01.14 10:36

    console.log( typeof nullVar === null );
    // false
    이건 잘 못 된거 아닌가요???
    문자열과 null 을 비교하면 당연히 false 아닌가요???

    typeof nullVar === "문자열" ----> true 가 됨

    좋은글 잘 보고 갑니다~

    • BlogIcon 재희 jaiyah 신고">2016.01.15 15:45 신고

      위 코드에서 nulVar에는 null이 선언되어 있습니다.
      typeof nulVar 의 결과값은 문자열인 object이고요
      그래서 최종 'object' === null 을 비교하게 되어 false가 되게 됩니다.

      그리고 typeof nullVar === "문자열" 은 false 가 될거에요
      object === string 을 비교하기 때문이죠
      조그마한 도움이 되셨길 바랍니다 ^^