Object 참조, 복사 정보
7129 단어 JavaScriptrabeetech
개요
Object를 복사할 때 착오가 있어서 메모로 썼어요.
실행 확인
참고 물품 인도
Object를 다른 변수에 직접 대입하는 경우 참조로만 전달됩니다.
참조처가 같기 때문에 대입처의 Object 내용이 바뀌면 원래의 Object 내용도 바뀐다.
var base_obj = {str: 'hoge', num: 1};
var copy_obj = base_obj; // 参照渡し
copy_obj.num = 2; // 参照なのでbase_objの値も変わる
console.log('base_obj', base_obj); // base_obj {"str": "hoge","num": 2}
얕은 복사
Object의 첫 번째 레이어만 복사합니다.
더 깊은 계층에 대해서는 참고일 뿐이다.
사용
Object.assign
. var base_obj = {str: 'hoge', num: 1, arr:[1,2,3,4,5]};
var copy_obj = Object.assign({}, base_obj); // shallow copy
copy_obj.str = 'fuga';
copy_obj.arr[0] = 0; // 参照になってるのでbase_objのarrの値も変わってしまう
console.log('base_obj', base_obj); // base_obj {"str": "hoge","num": 1,"arr": [0,2,3,4,5]
}
딥 카피
참조가 아닌 Object 컨텐트의 값을 복사합니다.
JSON 객체(
JSON.stringify
로 변환된 객체를 다시 Object의 작업JSON.parse
으로 반환한 후 변수에 대입합니다. var base_obj = {str: 'hoge', num: 1, arr:[1,2,3,4,5]};
var copy_obj = JSON.parse(JSON.stringify(base_obj)); // deep copy
copy_obj.str = 'fuga';
copy_obj.arr[0] = 0;
console.log('base_obj', base_obj); //base_obj {"str": "hoge","num": 1,"arr": [1,2,3,4,5]
}
총결산
본인이 실제 업무에서 사용하기만 하면 복사원을 변경하고 싶지 않은 패턴이 많기 때문에 상술한 방법의 deep copy를 사용합니다
어레이의 복사본이라면 스프레드시트
[...arr]
로도 가능합니다.원래는 여러 곳에서 같은 정보를 관리하는 것 자체가 복잡화의 원인이라고 생각했어요.
정말 복사가 필요합니까? 생각해 보는 것이 좋을 것 같습니다.
Reference
이 문제에 관하여(Object 참조, 복사 정보), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/cho_kin/articles/object-copy-mehod텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)