얕은 복사 (shallow copy)

<aside> 👉 : 객체의 최상위 속성을 복사하여 새 객체를 생성 : , 중첩된 객체는 원본 객체를 참조

예제

let animal1 = {
  name: '푸들이',
  owner: {
    name: '테드',
    job: 'FrontEnd-developer',
  },
};

let animal2 = animal1; // 동일한 객체를 참조
animal2.name = '멍멍이';
animal2.owner.name = 'Ted';

console.log(animal1.name); // 멍멍이
console.log(animal1.owner.name); // Ted
console.log(animal1); // { name: '멍멍이', owner: { name: 'Ted', job: 'FrontEnd-developer' } }
console.log(animal2); // { name: '멍멍이', owner: { name: 'Ted', job: 'FrontEnd-developer' } }

깊은 복사 (deep copy)

<aside> 👉 : 원본 객체의 값을 완전히 복제하여 새로운 객체를 생성 : 원본 객체와 복사본이 서로 독립적 JSON.parse(JSON.stringfy(obj)) 메서드를 사용

JSON.stringify() : 입력받은 객체를 JSON 문자열로 변환

JSON.parse() : JSON 문자열을 다시 JS 객체로 변환 >> 새로운 메모리 위치에 할당

</aside>

예제

let animal3 = JSON.parse(JSON.stringify(animal1));
console.log(animal1.name); // 멍멍이
console.log(animal3.name); // 멍멍이

animal3.name = '딸기';
console.log(animal1.name); // 멍멍이
console.log(animal3.name); // 딸기

자바스크립트 속성 존재 확인

let book = {
  title: '어린왕자',
  author: '생택쥐페리',
  publishYear: 1943,
};

console.log('title' in book); // true
console.log('publishYear' in book); // true
console.log('hello' in book); // false

속성 삭제

delete book.author;
console.log('author' in book); // false