JS에서 전체 복사와 얕은 복사의 차이점은 무엇인가요? 구체적인 코드 예제가 필요합니다
JavaScript에서 객체를 복사하는 방법에는 얕은 복사와 깊은 복사 두 가지가 있습니다. 얕은 복사본은 객체의 참조 주소만 복사하는 반면, 깊은 복사본은 완전히 독립적인 복사본을 만듭니다.
얕은 복사는 원본 개체의 참조 주소를 새 개체에 복사하는 것입니다. 그들은 동일한 메모리 공간을 가리킵니다. 개체 중 하나의 속성이 수정되면 다른 개체의 해당 속성도 수정됩니다. 이는 동일한 메모리 주소를 공유하기 때문입니다.
Deep copy는 새로운 객체를 생성하고 원본 객체의 모든 속성을 새 객체에 하나씩 복사하는 것입니다. 새 객체와 원본 객체는 서로 영향을 미치지 않습니다. 한 개체의 속성을 수정하더라도 다른 개체의 속성은 영향을 받지 않습니다.
아래에서는 얕은 복사와 깊은 복사의 차이점을 구체적인 코드 예시를 통해 설명하겠습니다.
먼저 얕은 복사본의 예를 살펴보겠습니다.
let obj1 = {name: "Alice", age: 20}; let obj2 = obj1; obj1.age = 21; console.log(obj1); // {name: "Alice", age: 21} console.log(obj2); // {name: "Alice", age: 21}
위 코드에서는 obj1
을 obj2
에 할당하여 얕은 복사본을 구현합니다. obj1
의 age
속성이 수정되면 obj2
의 age
속성도 수정됩니다. 같은 메모리 주소. obj1
赋值给obj2
实现了一个浅拷贝。当修改obj1
的age
属性时,obj2
的age
属性也被修改了,这是因为它们指向同一块内存地址。
接下来,我们来看一个深拷贝的示例:
function deepClone(obj) { if (obj === null || typeof obj !== 'object') { return obj; } let clone = Array.isArray(obj) ? [] : {}; for (let key in obj) { if (obj.hasOwnProperty(key)) { clone[key] = deepClone(obj[key]); } } return clone; } let obj1 = {name: "Alice", age: 20}; let obj2 = deepClone(obj1); obj1.age = 21; console.log(obj1); // {name: "Alice", age: 21} console.log(obj2); // {name: "Alice", age: 20}
在上述代码中,我们定义了一个deepClone
函数,用于实现深拷贝。该函数首先判断传入的参数是否为null或不是对象类型,如果是则直接返回,否则创建一个与传入对象类型相同的空对象clone
。然后通过遍历原对象的属性,递归调用deepClone
函数对每个属性进行深拷贝,并赋值给相应的clone
属性。最后返回新对象clone
。
通过使用deepClone
函数,我们实现了对obj1
的深拷贝。即使修改了obj1
的age
属性,但obj2
的age
rrreee
위 코드에서는 딥 카피를 구현하기 위해deepClone
함수를 정의했습니다. 이 함수는 먼저 전달된 매개변수가 객체 유형인지 여부를 확인합니다. 그렇다면 직접 반환하고, 그렇지 않으면 전달된 객체와 동일한 유형의 빈 객체 clone
을 생성합니다. 그런 다음 원본 객체의 속성을 순회하면서 deepClone
함수를 재귀적으로 호출하여 각 속성을 심층 복사하고 해당 clone
속성에 할당합니다. 마지막으로 새 개체 clone
이 반환됩니다. 🎜🎜deepClone
기능을 사용하여 obj1
의 전체 복사본을 구현합니다. obj1
의 age
속성이 수정되더라도 obj2
의 age
속성은 완전히 2이므로 변경되지 않습니다. 독립된 객체. 🎜🎜결론적으로 얕은 복사는 객체의 참조 주소만 복사하는 반면, 깊은 복사는 완전히 독립적인 복사본을 만듭니다. Deep Copy는 복사 객체를 수정할 때 원본 객체가 영향을 받지 않도록 보장하며 중첩된 구조를 가진 객체를 복사하는 데 적합합니다. 실제 개발 시 Deep Copy는 큰 성능 오버헤드를 초래할 수 있으므로 실제 상황에 맞는 적절한 복사 방법을 선택하는 것이 필요하다는 점을 참고하시기 바랍니다. 🎜위 내용은 JS에서 깊은 복사와 얕은 복사의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!