개발 공부/자바스크립트

[엘리의 드림코딩 JS 보충] 15. 변수(primitive vs object)

5묘 2022. 12. 6. 19:48

https://youtu.be/__Zz17_5FRU

// number, string, boolean, null, undefined
let number = 2;
let number2 = number;
console.log(number);
console.log(number2);//call by value(메모리에 값 자체 복사)

number2 = 3;

console.log(number);
console.log(number2); 


// object : primitive type 아니면 다 object
// object가 담긴 메모리는 따로 있고(변수 메모리 공간에 저장되긴 너무 큰 데이터라),
// obj 변수의 메모리에는 주소값이 저장된다.
const obj = { 
  name:'ellie', 
  age: 5
}
console.log(obj.name);

let obj2 = obj;
obj2.name = 'park'; //call by reference: 주솟값이 복사되며, 복사본 바꾸면 원본도 바뀜.
console.log(obj.name); 


// const로 선언한 객체는 변경이 어떤 때 가능? 어떤때 불가?
// const로 선언한 변수 내에는 객체의 reference(주소값)이 담겨있다.
const obj = {
  name: 'dave',
  age: 6
} // 이렇게 아예 다른 객체의 reference를 넣는 건 불가(컴파일 과정에서 SyntaxError 남)
// 하지만 잠긴건 이 ref에 대해서만이고, 원래 메모리의 위치는 잠겨있지 않으므로
// 이렇게 원래 메모리 상의 key에 대한 value 바꿀 수 있다.
obj.name = '명성';