Primitives | Objects : reference type |
number boolean String null undefined |
object function date regex array |
위를 보면 c==d는 false가 출력된다, 이는 c와 d가 object 타입이기 때문에 각각 다른 레퍼랜스를 가지고 있기 때문이다.
primitive 타입의 경우, 변수에 값이 저장되면 그 변수안으로 바로 저장이 된다.
반면에 object 타입의 경우, 변수 값을 어느 공간으로 이동시켜주고, 거기에 주소값을 준다.
이 주소를 reference라고 하며, value가 저장되어 있는 공간을 메모리라고 한다.
primitive : 값을 그대로 변수에 넣어준다.
const name = "pudding";
name -------------> pudding
object : 새로운 공간을 만들어서, 메모리 주소를 저장해준다.
const country = {}
country --------> 12345
즉, object의 경우, 값이 담길 새로운 공간(메모리)를 만들어서 주소를 할당해준다. address == reference(주소 ! 라고 생각하자 )
function incrementAge(age){
age = age + 1;
}
const myAge = 10;
incrementAge(myAge);
= 10
myAge는 primitiv 이기 때문에 값(value) 그 자체만 전달해주고,
myAge라는 변수자체를 전달해주지 않는다.
copy by value not reference
function incrementAge(user){
user.age = user.age + 1;
}
const me ={age : 10};
incrementAge(me);
reference인 me라는 객체 자체를 incrementAge에 보내는거기 떄문에
11이 된다.
object is passed as reference
예시 1) primitive type
const a = 1;
const b = a;
//a = 1
//b = 1
let a =1;
let b =a;
//a=1
//b=1
a=7
//b=1 b는 a라는 객체값을 아직 전달 받지 못햇기 떄문, 위에는 전달을 받고난 후에 출력한거
2) reference
let a = {name: "pudding"}
let b = a; // a라는 레퍼랜스를 아예 가져옴
//a => {name: "pudding"}
//b => {name: "pudding"}
a.name = "queen";
//a => {name: "queen"}
//b => {name: "queen"} 레퍼랜스 주소 자체를 다 가져와서 같이 변한다.
a = {name : "nala"}
//a= > nala
//b => queen a가 또 다른 레퍼랜스를 새로 만들었기 때문에 b는 여전히 queen이다.
'Development (국비 복습 ) > JavaScript' 카테고리의 다른 글
Factory Functions (3) | 2023.02.19 |
---|---|
생성자(constructor)와 prototype , __proto__ (0) | 2023.02.19 |
이전사진 다음사진 변경 (0) | 2023.02.19 |
버튼 클릭시 배열 사진 변경 (0) | 2023.02.18 |
null이랑 ""(undefined)의 차이점 (0) | 2023.02.18 |
댓글