JS에서 깊은 복사와 얕은 복사의 차이점은 무엇인가요?
이 둘의 차이점은 참조가 아닌 객체의 복사된 엔터티를 실제로 가져오는지 여부입니다. 딥 복사는 복사된 객체를 저장하기 위해 컴퓨터에서 메모리 주소를 여는 반면, 얕은 복사는 복사된 메모리만 가리킵니다. . 주소, 원래 주소의 개체가 변경되면 얕은 복사 개체도 그에 따라 변경됩니다.
딥 카피
가장 간단한 방법은
JSON.parse(JSON.stringify()) function deepCopy(o) { return JSON.parse(JSON.stringify(o)) } var c = { age: 1, name: undefined, sex: null, tel: /^1[34578]\d{9}$/, say: () => { console.log('hahha') } } // { age: 1, sex: null, tel: {} }
이 복사 방법은 일부 특수 속성(예: 정규식, 정의 취소, 함수)을 복사할 수 없다는 점에 유의해야 합니다.
재귀를 사용하여 모든 계층적 속성을 복사합니다
function deepCopyTwo(obj) { let objClone = Array.isArray(obj) ? [] : {}; if (obj && typeof obj == 'object') { for (const key in obj) { //判断obj子元素是否为对象,如果是,递归复制 if (obj[key] && typeof obj[key] === "object") { objClone[key] = deepCopyTwo(obj[key]); } else { //如果不是,简单复制 objClone[key] = obj[key]; } } } return objClone; }
Shallow copy
object.assign(target,source)
Object.asset 메소드는 소스 객체의 열거 가능한 속성과 객체 자체의 속성만 복사합니다.
대상 객체의 속성이 동일한 키를 갖는 경우 해당 속성은 소스에 의해 복사됩니다. 의 속성이 재정의됩니다. 이후 소스의 속성은 이전 속성을 유사하게 재정의합니다.
Object.sign은 값이 [null]인 속성을 건너뜁니다. null은 null 또는 "빈" 값을 나타내는 JavaScript 리터럴입니다. 즉, 개체가 할당되지 않습니다. 현재(객체 값 없음) 존재합니다). JavaScript 기본 값 중 하나입니다. ") 또는 정의되지 않은 소스 객체.
추천 튜토리얼: "JS Tutorial"
위 내용은 JS에서 깊은 복사와 얕은 복사의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!