찾다
웹 프론트엔드프런트엔드 Q&Aes6 딥 카피의 여러 구현 방법은 무엇입니까?

전체 복사 구현 방법: 1. "Object.sign({},obj)" 문을 사용하여 구현합니다. 2. "JSON.parse(JSON.stringify(obj))" 문을 사용하여 구현합니다. 달성하려면 " $.extend(true,[],arr)" 문을 사용하세요.

es6 딥 카피의 여러 구현 방법은 무엇입니까?

이 튜토리얼의 운영 환경: Windows 7 시스템, ECMAScript 버전 6, Dell G3 컴퓨터.

깊은 복사란

깊은 복사는 참조 유형에 따라 다릅니다. 본질적으로 얕은 복사는 단순히 스택의 참조를 복사하므로, 새로 복사된 값을 수정하면 복사된 객체도 사용자에 의해 수정되며 딥 카피는 힙 메모리에 새 객체를 위한 공간을 생성하므로 복사된 객체는 아무 이유 없이 수정되지 않습니다.

es6에서 전체 복사를 구현하는 방법

방법 1: Object.sign 사용Object.assign

Object.assign默认是对对象进行深拷贝的,但是我们需要注意的是,它只对最外层的进行深拷贝,也就是当对象内嵌套有对象的时候,被嵌套的对象进行的还是浅拷贝;

function cloneDeepAssign(obj){
  return Object.assign({},obj)
}

(温馨提示:数组拷贝方法当中,使用...sliceconcat等进行拷贝也是一样的效果,只深拷贝最外层)

同时,我们知道Object.assign针对的是对象自身可枚举的属性,对于不可枚举的没有效果;

所以,当我们对于一个层次单一对象的时候,可以考虑这种方法,简单快捷。(试过了,也不支持undefined)

方法2:利用JSON

这是我们最最最常提到的一种深拷贝的方式,一般大部分的深拷贝都可以用JSON的方式进行解决,本质是因为JSON会自己去构建新的内存来存放新对象。

function cloneDeepJson(obj){
  return JSON.parse(JSON.stringify(obj))
}

但是我们要注意的是:

  • 会忽略 undefinedsymbol

  • 不可以对Function进行拷贝,因为JSON格式字符串不支持Function,在序列化的时候会自动删除;

  • 诸如 MapSetRegExpDateArrayBuffer 和其他内置类型在进行序列化时会丢失;

  • 不支持循环引用对象的拷贝;(循环引用的可以大概地理解为一个对象里面的某一个属性的值是它自己)

方法3:利用jQuery的$.extend()

Object.sign은 기본적으로 객체 전체 복사를 사용하지만 주의해야 할 사항 즉, 객체 내에 중첩된 객체가 있을 때 중첩된 객체는 여전히 얕은 복사를 수행합니다.

var array = [1,2,3,4];
var newArray = $.extend(true,[],array);

(주의 사항: 배열 복사 방법에서는 ..., slice, concat 등은 동일한 효과를 가지며 가장 바깥쪽 레이어만 깊게 복사됩니다.)

동시에, 우리는 Object.sign이 객체 자체의 열거 가능한 속성을 대상으로 하며, 열거 불가능한 속성에는 영향을 미치지 않는다는 것을 알고 있습니다. 따라서 한 수준에서 단일 객체를 처리할 때 다음을 고려할 수 있습니다. 이 방법은 간단하고 빠릅니다. (시도해 보았지만 undefound도 지원되지 않습니다.)

🎜방법 2: JSON 사용🎜🎜🎜가장 일반적으로 언급되는 Deep Copy 방법으로, 일반적으로 대부분의 Deep Copy는 JSON을 사용하여 해결할 수 있습니다. 본질은 JSON이 새로운 객체를 저장하기 위해 자체적으로 새로운 메모리를 구축한다는 것입니다. 🎜rrreee🎜하지만 우리가 주의해야 할 점은: 🎜
  • 🎜는 정의되지 않음기호를 무시한다는 것입니다. code>; 🎜
  • 🎜직렬화 중에 JSON 형식 문자열이 Function을 지원하지 않기 때문에 Function을 복사할 수 없습니다. 때가 되면 자동으로 삭제됩니다 🎜
  • 🎜예: Map, Set, RegExp, Date , ArrayBuffer 및 기타 내장 유형은 직렬화 중에 손실됩니다. 🎜
  • 🎜 순환 참조 개체 복사는 지원되지 않습니다. 객체 내부로 이해됩니다. 특정 속성의 값은 그 자체입니다)🎜
🎜🎜방법 3: jQuery의 $.extend()를 사용하세요🎜🎜rrreee🎜분명히 가장 큰 것은 단점은 jQuery 라이브러리도 도입해야 하므로 일반적으로 사용되지 않습니다. 🎜🎜[관련 권장 사항: 🎜javascript 비디오 튜토리얼🎜, 🎜web front-end🎜]🎜

위 내용은 es6 딥 카피의 여러 구현 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

在es6中,可以利用“Array.isArray()”方法判断对象是否为数组,若判断的对象是数组,返回的结果是true,若判断对象不是数组,返回的结果是false,语法为“Array.isArray(需要检测的js对象)”。

es6中遍历跟迭代的区别是什么es6中遍历跟迭代的区别是什么Apr 26, 2022 pm 02:57 PM

es6中遍历跟迭代的区别是:遍历强调的是要把整个数据依次全部取出来,是访问数据结构的所有元素;而迭代虽然也是依次取出数据,但是并不保证取多少,也不保证把所有的数据取完,是遍历的一种形式。

es6中怎么判断两个对象是否相等es6中怎么判断两个对象是否相等Apr 19, 2022 pm 03:34 PM

在es6中,可用Object对象的is()方法来判断两个对象是否相等,该方法检测两个变量的值是否为同一个值,判断两个对象的引用地址是否一致,语法“Object.is(对象1,对象2)”;该方法会返回布尔值,若返回true则表示两个对象相等。

es6怎么将数字转为字符串es6怎么将数字转为字符串Apr 19, 2022 pm 06:38 PM

转换方法:1、利用“+”给数字拼接一个空字符,语法“数字+""”;2、使用String(),可把对象的值转换为字符串,语法“String(数字对象)”;3、用toString(),可返回数字的字符串表示,语法“数字.toString()”。

es6中assign的用法是什么es6中assign的用法是什么May 05, 2022 pm 02:25 PM

在es6中,assign用于对象的合并,可以将源对象的所有可枚举属性复制到目标对象;若目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性,语法为“Object.assign(...)”

es6怎么改变数组数据es6怎么改变数组数据Apr 26, 2022 am 10:08 AM

改变方法:1、利用splice()方法修改,该方法可以直接修改原数组的内容,语法为“数组.splice(开始位置,修改个数,修改后的值)”;2、利用下标访问数组元素,并重新赋值来修改数组数据,语法为“数组[下标值]=修改后的值;”。

sort排序是es6中的吗sort排序是es6中的吗Apr 25, 2022 pm 03:30 PM

sort排序是es6中的;sort排序是es6中用于对数组的元素进行排序的方法,该方法默认不传参,按照字符编码顺序进行排序,排序顺序可以是字母或数字,并按升序或降序,语法为“array.sort(callback(a,b))”。

import as在es6中的用法是什么import as在es6中的用法是什么Apr 25, 2022 pm 05:19 PM

在es6中,import as用于将若干export导出的内容组合成一个对象返回;ES6的模块化分为导出与导入两个模块,该方法能够将所有的导出内容包裹到指定对象中,语法为“import * as 对象 from ...”。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는