얕은 복사로 만들 수 있고, 이후 깊은 복사로 만들 수 있음.
깊은 복사는 콜백함수로 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로 받은 데이터를 저장한 객체를 복사할 때 등! 순수한 정보만 다룰 때 활용하기 좋은 방법이라고 한다.
'coding > js' 카테고리의 다른 글
화살표 함수를 쓰면 안되는 때와 써야할 때. (0) | 2022.09.15 |
---|---|
실행 컨텍스트 (0) | 2022.09.06 |
참조형의 가변값과 불변값. (0) | 2022.09.03 |
Js의 메모리와 데이터, 그리고 기본형 데이터의 불변성. (0) | 2022.09.02 |
인코딩 디코딩 escape(), unescape() (0) | 2022.05.24 |