clone 을 하는 이유
- 우리는 흔히 값을 배정 혹은 변수에 넣을 때
=
연산자를 사용 한다.- 예를 들면
var number_val = 1;
- 예를 들면
- 다른 변수를 지정을 하고 그 값을 또 다른 변수에
=
연산자를 이용하여 지정한다면?- var number_val2 = 0;
- number_val = number_val2
- 이렇게 지정을 한다면 두 변수에 값은 어찌 될까?
- 두 변수에 값은 나중에 지정 된 0 값으로 변동 된다.
- 0가 된 이유는
=
연산자는 오른쪽에 있는 값을 왼쪽으로 넣는다 라는 의미이기 떄문이다.
- 0가 된 이유는
- 이렇게 값을 지정하는 경우는
=
연산자를 통해 가능하다 - 이런 복사를 하는 과정에 배열이라는 그릇이 들어오면 이야기가 달라진다.
- 1차원 배열 { 1, 2, 3, 4} 와 같은 경우는 문제가 없지만
- 2차원 이상의 배열 { 1 , {2,3}, 4} 이런 배열의 경우는
=
연산자로 복사 할 수 없다.
- 해당 페이지는 아래 코드를 script 형태로 코딩해 놓았으므로 F12를 이용해 값을 console 에서 확인 할 수 있다.
- _.clone 처럼 사용하기 clone 함수를 사용하기 위해선 lodash 라는 라이브러리가 필요하고 해당 블로그에는 lodash.js 가 로딩되어 있다.
- lodash 라이브러리가 없다면 _.clone 은 사용할 수 없다.
const externalObject = {
color: 'red'
}
const original = {
a: new Date(),
b: NaN,
c: new Function(),
d: undefined,
e: function() {},
f: Number,
g: false,
h: Infinity,
i: externalObject
}
const cloned = _.clone(original)
externalObject.color = 'blue'
console.info('⬇️ shallow cloning 🌈')
console.info(
'✏️ Notice the i.color property we changed on original is also changed in the shallow copy'
)
console.log(original)
console.log(cloned)
const deepcloned = _.cloneDeep(original)
externalObject.color = 'yellow'
console.log('')
console.info('⬇️ deep cloning 🌈')
console.info('✏️ Notice the i.color property does not propagate any more')
console.log(original)
console.log(deepcloned)