js에는 일반적으로 두 가지 다른 데이터 유형의 값이 있습니다.
값으로 전달되는 기본 유형(정의되지 않음, Null, 부울, 문자열, 숫자 포함)
주소로 전달되는 참조 유형(배열, 객체 포함) type은 값으로 전달될 때 메모리의 주소입니다.
복제 또는 복사는 두 가지 유형으로 나뉩니다.
얕은 복제: 기본 유형은 값으로 전달되고 객체는 여전히 참조로 전달됩니다.
심층 복제: 모든 요소나 속성이 완전히 복제되고 원래 참조 유형과 완전히 독립적입니다. 즉, 나중에 객체의 속성이 수정될 때 원래 객체는 수정되지 않습니다.
function cloneObject(obj){
var o = obj.constructor === 배열 ? [] : {};
for(var i in obj){
if(obj.hasOwnProperty(i)){
o[i] = typeof obj[i ] === "개체" ? cloneObject(obj[i]) : obj[i]
}
}
return o; >기타: 단순 배열이고 요소에 참조 유형 값이 없으면 array.concat() 또는 array.slice(0)을 직접 사용하여 간단하고 간단하게 배열을 복사할 수 있습니다. 효율적인. 배열 concat() 및 Slice()는 새 배열을 생성하며 원래 배열은 영향을 받지 않습니다. 하지만 복사된 배열의 요소에는 참조 유형 값이 없는지 확인해야 한다는 점에 유의해야 합니다.
이것은 매우 간단하고 실용적인 또 다른 심층 복제 방법입니다.
코드 복사
코드는 다음과 같습니다. var s = JSON.stringify( obj ) var o = JSON.parse( s );