기본형과 참조형의 종류 및 차이점

Primitive Type   - Number, String,Boolean,null,undefined  
기본값 : 값을 그대로 할당.

Reference Type - Object - Array,Function RegExp , Map,Set WeakMap , WeakSet
참조값 : 값이 저장된 주소값을 할당(참조)

우선 기본값에 대해 알아보자 
var a ; 를 타이핑하면 우선 a라는 변수를 저장할 데이터 영역을 확보한다. 314번 영역을 확보하고 해당 주소를 변수명과 맵핑시킨다.



이제 a에 값을 입력해보자.  
a=10; 변수명에 맵핑된 주소를 찾아가 해당 주소의 데이터 영역에 10을 저장한다.

이번에는 변수 b에 "abc"를 할당해 보자.
위와 마찬가지의 과정을 거쳐 아래와 같이 저장된다.
var b = 'abc' 

b에 다른 값을 할당하고 b=c 할 경우 

기본값은 직접적인 비교가 가능하다.
a===b   : false
a===c   :  true

이제 참조형에 대해서 알아보자.

var obj ={
    a:1,
    b:'b'
}
라는 객체가 선언 됐을 때 아래와 같이 저장된다.

즉 참조형은 기본형의 집합으로 생각할 수 있다.

그렇다면 var obj2 = obj를 선언했을 때 어떻게 될까?

저장된 객체의 주소만을 복사해온다. 참조

만약  obj2.a =10으로 할당할 경우. obj.a 역시 10으로 변환한다. 
즉 obj === obj2 는  true 동일한 객체를 바라본다.

그렇다면 참조에 참조가 걸리는 경우는 어떻게 될까?

var obj3 = {
    a: [1,2]
}


그렇다면 a에 'new'라는 문자를 대입할 경우 어떻게 될까?


var obj3 = {
    a: [1,2]
}

obj3.a='new'



a자리에 new 가 대입되면서 1012와 1013은 연결이 끊기게 되고 GC가 실행될 때 같이 사라지게됩니다.

+ Recent posts