coding/js

Js 불변 객체 만들기.

사과키라임파이 2022. 9. 3. 20:37


얕은 복사로 만들 수 있고, 이후 깊은 복사로 만들 수 있음.
깊은 복사는 콜백함수로 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로 받은 데이터를 저장한 객체를 복사할 때 등! 순수한 정보만 다룰 때 활용하기 좋은 방법이라고 한다.