>  기사  >  웹 프론트엔드  >  JS에서 깊은 복사와 얕은 복사의 차이점은 무엇입니까?

JS에서 깊은 복사와 얕은 복사의 차이점은 무엇입니까?

Guanhui
Guanhui원래의
2020-06-12 14:47:105372검색

JS에서 깊은 복사와 얕은 복사의 차이점은 무엇입니까?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.