깊은 카피와 얕은 카피의 이해
대상을 복제하고 싶을 때 일반적인 방법은obj2=obj1이다. 그러나obj2를 변경할 때obj1에 영향을 주고obj1도obj2에 영향을 미치기 때문에 대상의 직접적인 값이 여전히'연결'되는 문제를 해결하기 위해 깊은 복사와 얕은 복사가 필요하다.
깊이 복사와 얕은 복사
얕은 복사: 인용을 복제하여 모든 인용 대상이 데이터를 가리키게 하고 이 데이터를 수정할 수 있다. 즉, 바늘만 복사하고 같은 메모리 공간을 가리킨다.시스템의 기본 얕은 복사입니다.
,
es5와 es6의 얕은 복제는 다르다. es6는 더 간단하다. es5에서 for...in..의 문법,
대상에게 함수를 만들어서 대상을 복사해서 이 복사된 새로운 대상을 되돌려줍니다
demo: 할당 해제 (얕은 복사)
function clone(obj){
return {...obj};
}
var a = {a:1, b:2, c:3, d:[0, 1, 2]}
var b = clone(a);
console.log(b.d[1]); //1
b.d[1] = 2;
console.log(b.d[1]); //2
console.log(a.d[1]); //2
object.assign () 얕은 복사
function clone(obj){
return Object.assign({},obj);
}
Object.assign () 방법은 모든 열거 가능한 속성의 값을 한 개 이상의 원본 대상에서 목표 대상으로 복사하는 데 사용되며, 최소한 두 개의 파라미터를 허용하며, 첫 번째 파라미터는 복사할 수 있는 목표 대상이며, 방법 실행이 끝난 후에 되돌아오고, 나머지 파라미터는 복사할 수 있습니다.
깊이 복사: 변수 값을 복제하고 비기본 유형의 변수는 기본 유형의 변수로 귀속된 후에 복제한다.
array의 슬라이스와 concat
var arr = ["One","Two","Three"];
var arrtoo = arr.slice(0);
arrtoo[1] = "set Map";
document.writeln(" :" + arr + "
");//Export: :One,Two,Three
document.writeln(" :" + arrtoo + "
");//Export: :One,set Map,Three
var arrtooo = arr.concat();
arrtooo[1] = "set Map To";
document.writeln(" :" + arr + "
");//Export: :One,Two,Three
document.writeln(" :" + arrtooo + "
");//Export: :One,set Map To,Three
json 대상의paese와stringify
demo:
var source = { name:"source", child:{ name:"child" } }
var target = JSON.parse(JSON.stringify(source));
target.name = "target"; // target name
console.log(source.name); //source
console.log(target.name); //target
target.child.name = "target child"; // target child
console.log(source.child.name); //child
console.log(target.child.name); //target child
// 2
var source = { name:function(){console.log(1);}, child:{ name:"child" } }
var target = JSON.parse(JSON.stringify(source));
console.log(target.name); //undefined
// 3
var source = { name:function(){console.log(1);}, child:new RegExp("e") }
var target = JSON.parse(JSON.stringify(source));
console.log(target.name); //undefined
console.log(target.child); //Object {}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.