undefined와 null의 차이

김원호·2022년 7월 18일
0

🤝공통점

  • 둘다 각각의 타입명(undefined, null)의 값이 유일하다.
  • undefined 타입의 값은 undefined가 유일한다.
  • null 타입의 값은 null이 유일하다.

undefined

undefined 타입의 값은 undefined가 유일하다.

선언 이후 값을 할당하지 않은 변수는 undefined 값을 가진다.
선언은 되었지만 값을 할당하지 않은 변수에 접근하거나 존재하지 않는 객체 프로퍼티에 접근할 경우 undefined가 반환된다.

  • 객체:
    • 원시 값(문자(string), 숫자(number), 불린(boolean), 심볼(Symbol), null, undefined)을 제외한 나머지 값들(함수, 배열, 정규표현식 등)
    • 키(key)와 값(value)으로 구성된 프로퍼티들의 집합
  • 프로퍼티:
    • 키(key)와 값(value)으로 구성
let person={
  name:'kim',
  age:20
}

프로퍼티 : name: Lee, age: 20
프로퍼티 키 : name, age
프로퍼티 값 : Lee, 20

변수 선언에 의해 확보된 메모리 공간을 처음 할당이 이루어질 때까지 빈 상태(대부분 비어있지 않고 쓰레기 값(Garbage value)이 들어 있다)로 내버려두지 않고 자바스크립트 엔진이 undefined로 초기화하기 때문이다.
자바스크립트 엔진은 누구도 참조하지 않는 메모리 영역에 대해 가비지 콜렉션을 수행할 것이다.

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

null

  • null 타입의 값은 null이 유일하다.
  • null은 ‘비어있는, 존재하지 않는 값'(값의 부재)을 의미한다.
  • 프로그래밍 언어에서 null은 의도적으로 변수에 값이 없다는 것을 명시할 때 사용한다.
  • 변수가 기억하는 메모리 어드레스의 참조 정보를 제거하는 것을 의미
  • 이는 이전에 할당되어 있던 값에 대한 참조를 명시적으로 제거하는 것을 의미하며, 자바스크립트 엔진은 누구도 참조하지 않은 메모리 공간에 대해 *가비지 콜렉션을 수행할 것이다.

typeof 에서 null

  • 단, typeof로 자료형을 확인할 때 object(객체)를 반환하는데, null이 빈 참조를 나타내는 데 자주 사용되기 때문이다.
  • 그래서 원시 자료형으로 생각해도 되지만 엄밀히 말해서는 null은 객체이고 참조 자료형이다.

참조자료형

  • 원시 자료형이 아닌 모든 것은 참조 자료형. 배열([])과 객체({}), 함수(function(){})가 대표적
  • 참조 자료형을 변수에 할당할 때는 변수에 값이 아닌 주소를 저장합니다.
  • 하나의 주제는 있지만 분명 서로 다르고, 여러 개의 데이터를 가지고 있다.
let nullType = null;
console.log(typeof null); // object
  • null 값으로 데이터를 초기화하는 경우
// Number 변수 초기화
let data1 = 0;
// String 변수 초기화
let data2 = "";
// Boolean 변수 초기화
let data3 = false;
// Object 변수 초기화
let data4 = null;
  • 일반적으로 초기화와 동시에 변수를 할당하게 되는데 이때 할당된 초깃값을 통해 이 변수가 어떤 데이터형을 저장할 변수인지을 가늠할 수 있습니다.
  • 가령, data3 = false 의 경우에 할당된 초기값이 false 인 것으로 보아 이 변수에는 true 또는 false 가 저장될 것을 알 수 있습니다. 
  • 예외적으로 다른 데이터형인 문자열등... 이 들어갈 수도 있지만 대개는 그런 예측가능하지 않은 값을 넣지는 않습니다.
  • 위의 코드에서처럼 초깃값으로 null 을 넣어다는 의미는 소스코드 어디에선가 이 변수에 클래스의 인스턴스를 대입할 거라는 것을 알 수 있습니다.
data4 = new FnClass();
profile
당신은사랑받기위해태어난사람

0개의 댓글