본문 바로가기
JavaScript

[JavaScript] 깊은복사, 얕은복사, Object.freeze()

by 박헹구 2022. 1. 6.
반응형

Object.freeze()

객체를 동결하며, 동결된 객체는 더이상 변경될 수 없습니다.

동결된 객체는 새로운 속성을 추가하거나 존재하는 속성을 제거하는 것을 방지한다.

const obj = {
  prop: 42
};

Object.freeze(obj);

obj.prop = 33;
// Throws an error in strict mode

console.log(obj.prop);
// expected output: 42

 

 

얕은 복사: 객체의 property들을 복사 (depth 1단계까지만)

깊은복사: 객체의 프로퍼티들을 복사 (모든 depth에 대해서)

1. 프로퍼티들을 복사한다.

2. 프로퍼티들 중에 참조형이 있으면 1번 반복 --> 재귀

Object.assign()

깊은복사를 해야만 immutable(변경불가능) 하다라고 말할 수 있음.

불변객체를 말함

불변객체는 매번 새로운 객체를 생성한다는 개념인데

그리하여 불변객체를 사용하기 위해 매번 깊은 복사를 함. 

깊은 복사를 해야만 기존객체와 동떨어진 별개의 데이터가됨

const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };

const returnedTarget = Object.assign(target, source);

console.log(target);
// expected output: Object { a: 1, b: 4, c: 5 }

console.log(returnedTarget);
// expected output: Object { a: 1, b: 4, c: 5 }
let a = {
  a: 1,
  b: [1, 2, 3],
  c: {d: 1, e: 2}
}
let b = Object.assign({}, a); //얕은복사
b.b = Object.assign([], a.b); //깊은복사

console.log(a);
console.log(b);

b.b[1] = 20;

console.log("b", b); //b { a: 1, b: [ 1, 20, 3 ], c: { d: 1, e: 2 } }
console.log("a", a); //a { a: 1, b: [ 1, 2, 3 ], c: { d: 1, e: 2 } }

 

for문 예외
let obj = {
  prop1: 1,
  prop2: 2,
  prop3: 3
}

for(const prop in obj) {
  console.log(prop) // prop1, prop2, prop3
}
//
let keys = Object.keys(obj);
for(let i = 0; i< keys.length; i++) {
  const prop = obj[keys[i]];
  console.log(prop); // 1, 2, 3
}

 

반응형

'JavaScript' 카테고리의 다른 글

[JavaScript] JavaScript 공부할 때 좋은 플러그인  (0) 2022.03.16
[JavaScript] Template literal(문자열)  (0) 2022.01.06
Elements  (0) 2021.09.23
[JavaScript] Date 함수  (0) 2021.08.25
Destructuring(구조분해할당)  (0) 2021.08.23

댓글