Js 불변 객체 만들기.
얕은 복사로 만들 수 있고, 이후 깊은 복사로 만들 수 있음.
깊은 복사는 콜백함수로 type이 !null이고, object인 값을 계속 호출해서 복사함.
깊은 복사 코드.
var copyObjDeep = funtion(target)
{
var result = {};
if (typeof target == ‘object’ && target !== null)
{
for (var prop in target)
{
result[prop] = copyObjDeep(target[prop]);
}
}
else
{
result = target;
}
return result;
}
혹은 json 문자열로 만든 후,(=JSON.stringify(obj)) 이 값을 다시 json 객체로 변환하기!
이것은 잘 작동하나, 메서드(함수), 숨겨진 프로퍼티인 __proto__나 getter/setter 등 json 변환이 불가능한 것은 무시됨. (func1: f() 이런식으로 함수가 무시됨.)
JSON은 데이터 교환을 목적으로 만들어진 언어에 종속되지 않는 포맷입니다.
따라서 자바스크립트 특유의 객체 프로퍼티는 JSON.stringify가 처리할 수 없습니다.
JSON.stringify 호출 시 무시되는 프로퍼티는 아래와 같습니다.
함수 프로퍼티 (메서드)
심볼형 프로퍼티 (키가 심볼인 프로퍼티)
값이 undefined인 프로퍼티
let user = {
sayHi() { // 무시
alert("Hello");
},
[Symbol("id")]: 123, // 무시
something: undefined // 무시
};
alert( JSON.stringify(user) ); // {} (빈 객체가 출력됨)
https://ko.javascript.info/json
JSON과 메서드
ko.javascript.info
보통 httprequest로 받은 데이터를 저장한 객체를 복사할 때 등! 순수한 정보만 다룰 때 활용하기 좋은 방법이라고 한다.