
참고하면 좋은 [객체] 포스팅 (https://velog.io/@sooxpak/JavaScript-%EA%B0%9D%EC%B2%B4)

값 자체로써 변수에 저장되고 복사 된다
불변값이다 (메모리에 저장된 값 수정 x)
참조값을 통해 변수에 저장되고 복사된다
가변값이다(메모리에 저장된 값 수정 O)
let o1 = { name : "김아무개" };
let o2 = o1;
o2.name = "홍길동";
=> o1의 값도 변경됨 (side effect가 발생한다고 말함)
let o1 = {name : "김아무개" };
let o2 = {...o1};
o2.name = "홍길동";
=> 새로운 객체를 생성하여 사용하였기 때문에 o1의 값이 변경되지 않음
스프레드 연산자를 사용했기 때문에 o1과 동일한 프로퍼티를 쉽게 가져올 수 있음
let o1 = {name : "김아무개"};
let o2 = o1;
let o3 = {...o1};
console.log(o1 === o2); // true
console.log(o1 === o3); // false
=> 프로퍼티는 동일하지만 참조값이 다르기 때문에 false 반환
console.log(
JSON.stringify(o1) === JSON.stringify(o3)
); //true