javascript - 객체 코드를 재귀적으로 복사하는 것에 대한 질문
淡淡烟草味
淡淡烟草味 2017-05-19 10:25:31
0
2
487
으아아아
淡淡烟草味
淡淡烟草味

모든 응답(2)
黄舟
  1. 현재 obj가 객체인지 배열인지 확인하세요. 배열이면 결과도 배열이고, 그렇지 않으면 결과는 일반 객체입니다

  2. 당신의 이해가 잘못되었습니다. 이 문장은 obj가 존재하고 객체인 경우如果 obj 存在,并且是对象

  3. 如果不是引用类型(对象),则说明当前键的值是基础类型,则直接将对应新的 result 对应的 key 也设置为这个值就可以了

by the way. 因为深拷贝一个对象有可能会造成内存泄漏问题。因为 key 有可能引用一个类型,从而在内部引用自身造成内存泄漏,所以深拷贝在遇到引用类型的 key 时会仅仅把 heap 内存的地址进行复制。

而且题目中第一行通过判断 splice 来判断是数组还是对象是不严谨的,万一对象下有个叫 splice 的属性刚好是函数呢,Array.isArray 方法的支持度很好,可以换成这个。

ES6的话直接 Object.assign()

를 의미합니다. 🎜🎜참조형(객체)이 아니라면 현재 키의 값이 기본형이라는 뜻이고, 새로운 결과에 해당하는 키를 직접 이 값으로 설정합니다🎜🎜 🎜그나저나 객체 전체 복사로 인해 메모리 누수가 발생할 수 있기 때문입니다. 키는 유형을 참조하여 내부적으로 자신을 참조하고 메모리 누수를 일으킬 수 있으므로 깊은 복사는 참조 유형 키를 만날 때만 힙 메모리의 주소를 복사합니다. 🎜 🎜그리고 질문의 첫 번째 줄은 splice를 판단하여 배열인지 객체인지 판단하는 데 엄격하지 않습니다. 객체 아래에 우연히 함수가 된 splice라는 속성이 있으면 어떻게 되나요? Array.isArray 메소드 지원이 아주 좋습니다. 이 메소드로 대체할 수 있습니다. 🎜 🎜ES6의 경우 Object.ass()를 사용하세요. 🎜
漂亮男人
  1. 배열에만 splice 메서드가 있으므로 obj가 객체인지 배열인지 확인하세요. obj.splice에 obj가 배열임을 나타내는 반환 값이 있으면 결과도 배열입니다. 그렇지 않으면 결과는 객체입니다. obj.splice有返回值说明obj是数组,那么result也是数组,否则result就是对象。

  2. if(obj存在,并且obj是对象),因为null的typeof也是object,多一步判断可以去掉null。

  3. 如果是复制的值是一个private值,那么就直接赋值就可以,如果是对象,那么就像上一步一样递归的复制对象,直到复制的值是private

(obj가 존재하고 obj가 객체인 경우) null의 typeof도 객체이기 때문에 한 단계 더 판단하여 null을 제거할 수 있습니다.


🎜복사된 값이 private 값인 경우 값을 직접 할당하면 됩니다. 객체인 경우 복사된 값이 private이 될 때까지 이전 단계와 같이 객체를 재귀적으로 복사합니다. 값. 🎜🎜 🎜 🎜얕은 카피와 깊은 카피를 얘기하면 뻔뻔하게도 제가 쓴 글을 읽어보시길 권합니다...🎜/a/11...🎜
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!