>  기사  >  웹 프론트엔드  >  JavaScript 객체의 전체 복사본

JavaScript 객체의 전체 복사본

PHPz
PHPz원래의
2017-04-04 10:18:431080검색

js 데이터 유형 은 두 가지 주요 범주로 나눌 수 있습니다.

  • 값 유형(원본 유형):
    예를 들어String 및 Number 유형은 모두 값 유형입니다.

  • 참조유형:
    예를 들어 Object, Array는 참조 유형입니다.

둘의 차이점을 간단히 말씀드리자면
가장 눈에 띄는 차이점은 할당입니다. 값 유형 할당은 새 변수에 대한 실제 복사 할당입니다.

var a, b = "issax";
a = b;
a +="_coder";
console.log(a);  //issax_coder
console.log(b);  //issax

b를 a, a, b에 할당한 후 위의 예를 살펴보세요. 두 변수는 서로 독립적입니다. 자신의 값을 변경해도 다른 변수에는 영향을 미치지 않습니다.

그런 다음 참조 유형을 살펴보세요.

var obj_i, obj_ii = { name: 'issax' };
obj_i = obj_ii;
obj_i['career'] = 'coder';
console.log(obj_i);  //Object {name: "issax", career: "coder"}
console.log(obj_ii);  //Object {name: "issax", career: "coder"}

obj_ii의 값을 obj_i에 할당한 후 obj_i의 내용을 변경하면 obi_ii의 내용도 변경된다는 것을 보셨나요? 유형. 참조 유형 변수 저장은 내용 자체가 아니라 내용에 대한 포인터입니다. 예, 값을 할당하면 실제로 이 포인터가 모두 동일한 내용을 가리킵니다. 마찬가지죠?

Zhoucao, 내가 말하는 gui는 무엇입니까? 객체 [얼굴 가리개]

복사에는 얕은 복사와 깊은 복사가 있습니다. , 위의 예를 읽고 나면 생각해보면 얕은 복사가 무엇인지, 깊은 복사가 무엇인지 알 수 있을 것입니다.
일반 값 유형의 할당 과정은 깊은 복사이고, 참조 유형의 할당은 얕은 복사입니다.

객체는 참조 유형이므로 일반적인 할당 과정은 얕은 복사입니다. 그러나 때로는 객체도 깊게 복사해야 합니다. GUI에 대해 뭐라고 말했습니까?

예를 들어 이틀 전 Vue 작업을 할 때 이름별로 정렬해야 하는 요구 사항이 발생했습니다. 클릭 횟수가 홀수이면 항목이 정렬되고, 클릭 횟수가 짝수이면 원래 정렬이 복원됩니다. 업데이트시간. 쉽지는 않습니다. 매번 정렬하면 됩니다. 이렇게 하는 것은 정말 어리석은 일입니다. 의미 있는 첫 번째 정렬을 제외하고 두 번째, 세 번째, 네 번째, 다섯 번째, 여섯 번째, 일곱 번째... 모두 반복되는 것은 별로 유용하지 않습니다. 매번 정렬하는 것이 성능 낭비입니까? 그럼 정렬된 객체들을 저장할 차례인데...
그럼 gg인데 객체가 참조형인데 처음에 직접 할당했는데 그다음 장면이 너무 당황스럽더라구요, 데이터가 전혀 움직이지 않더라구요 [ 얼굴 가리개];

속성을 ​​하나씩 반복적으로 복사하시겠습니까? 그러면 내 개체는 다음과 유사합니다.

JavaScript 객체의 전체 복사본

Paste_Image.png

풀을 잡아보세요. 실제 재귀 복사본은 sb입니다. 운 좋게도 제가 생각한 것은 다음과 같습니다. 이거 좋은 생각이네요. 참조 유형을 값 유형으로 변환하면 되는 문제 아닌가요? [Ecstasy]
웨이터, 위 코드는

function deepCopy(sender){
  var temp = JSON.stringify(sender);
  return JSON.parse(temp);
}  
var obj_i, obj_ii = { name: 'issax' };
obj_i = deepCopy(obj_ii);
obj_i['career'] = 'coder';
console.log(obj_i);  //Object {name: "issax", career: "coder"}
console.log(obj_ii);  //Object {name: "issax"}

JavaScript 객체의 전체 복사본

Paste_Image.png

위 내용은 JavaScript 객체의 전체 복사본의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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