![]() |
|---|
var str = 'test!'; |
![]() |
|---|
| 데이터 재할당 |
var str = 'test!'; |
str = 'Hello!; |
불변성은 데이터 영역의 메모리에 대한 것이다.
불변성은 식별자 변수 영역에 해당하는 데이터 값의 재할당이 기준이 아니다.
데이터 영역의 데이터가 변경이 가능한지에 대한 여부이다.
var obj1 = {
a: 1,
b: 'bbb,
};
![]() |
|---|
| 참조형 데이터의 변수 할당 |
var obj1 = {
a: 1,
b: 'bbb,
};
obj1.a = 2;
![]() |
|---|
| 참조형 데이터의 변수 재할당 |
// STEP01. 쭉 선언을 먼저 해볼께요.
var a = 10; //기본형
var obj1 = { c: 10, d: 'ddd' }; //참조형
// STEP02. 복사를 수행해볼께요.
var b = a; //기본형
var obj2 = obj1; //참조형
b = 15;
obj2.c = 20;
객체에서 위와 같이 원치 않는 값도 변하는 현상을 방지하기 위해서는 객체를 불변객체로 만들어 값의 변경을 방지하거나, 객체의 변경이 필요한 경우에는 얕은 복사나 깊은 복사를 하여야 한다.
: 객체의 프로퍼티에 접근하는 것이 아닌, 아예 새로운 객체를 반환시킨다.
: for ~ in 구문을 이용하여, 객체의 모든 프로퍼티에 접근한다.
var copyObject = function (target) {
var result = {};
for (var prop in target) {
result[prop] = target[prop];
}
return result;
}
: 객체의 프로퍼티 중, 기본형 데이터는 그대로 복사 + 참조형 데이터는 다시 그 내부의 프로퍼티를 복사 ⇒ 재귀적 수행!
var copyObjectDeep = function(target) {
var result = {};
if (typeof target === 'object' && target !== null) {
for (var prop in target) {
result[prop] = copyObjectDeep(target[prop]);
}
} else {
result = target;
}
return result;
}