关键词:
let obj = c:1,d:()=>
obj_ = a:1,b:2
obj__ = a:()=>,b:()=>,c:1
_obj = [1,2,3,1]
_obj_= 1
// 深拷贝
// JSON.parse(JSON.stringify())
// 局限性:
// 他无法实现对函数 、RegExp等特殊对象的克隆
// 会抛弃对象的constructor,所有的构造函数会指向Object
// 对象有循环引用,会报错
let o = JSON.parse(JSON.stringify(obj))
console.log(o)//c:1
//遍历 递归
// 对数据类型做判断
const deepClone = (obj)=>
let o = //存结果
//判断是否为复杂类型(引用类型)
if(typeof obj === 'object' && obj !== null )
//数组处理
if(Array.isArray(obj))
o = [...obj]
//对象处理
for(let item in obj)
if(obj.hasOwnProperty(item))
o[item] = deepClone(obj[item])
else
o = ...obj
else
o = obj //普通类型
return o
// deepClone(obj)
console.log(deepClone(obj))// c: 1, d: [Function: d]
console.log(deepClone(obj_))// a: 1, b: 2
console.log(deepClone(obj__))// a: [Function: a], b: [Function: b], c: 1
console.log(deepClone(_obj))//[ 1, 2, 3, 1 ]
console.log(deepClone(_obj_))//1
//精简
const deepClone_simple = (obj) =>
let o = ;
//普通类型
(typeof obj !== 'object' || obj === null)&&(o = obj);
//复杂类型
//数组
Array.isArray(obj)&&(o = [...obj]);
for(let item in obj)
obj.hasOwnProperty(item)&&(o[item] = deepClone_simple(obj[item]));
return o;
js对象简单深拷贝
functiondeepClone(obj1,obj2){varobj2=obj2||{};//最初的时候给它一个初始值=它自己或者是一个jsonfor(varnameinobj1){if(typeofobj1[name]==="object"){//先判断一下obj[name]是不是一个对象obj2[name]=(obj1[name].constructor===Array)?[]:{};//我 查看详情
javascript递归简单实现个对象深拷贝(代码片段)
...全拷贝了得自己便利写 最近在项目中需要深拷贝自己简单封了个方法 话不多说直接上码1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<metaname="viewport"con 查看详情
简单实现深拷贝工具函数(代码片段)
consttype=obj=>vartoString=Object.prototype.toString;varmap=‘[objectArray]‘:‘array,‘[objectObject]‘:‘object‘returnmap[toString.call(obj)]cosntdeepClone=data=>vart=type(data)vari;varo;varlen 查看详情
对象拷贝-深拷贝
1packagecom.yj.fenghao.clone;2//深拷贝的简单测试3importjava.util.Date;45publicclassEmployeeimplementsCloneable{67privateStringname;8privateStringage;9privateStringsalary;10privateStringcareer;11privateDatedat 查看详情
js深拷贝与浅拷贝的区别,实现深拷贝的几种方法
如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果A没变,那就是深拷贝,自食其力。此篇文章中也会简单阐述到栈堆,基本数据类... 查看详情
深拷贝与浅拷贝的区别,实现深拷贝的几种方法(代码片段)
...nblogs.com/echolun/p/7889848.html 如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力。此篇文章中也会... 查看详情
深拷贝和浅拷贝(代码片段)
对于普通类型的对象来说,它们之间的复制是很简单的,例如:inta=88;intb=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。 #include<iostream>usingnamespa... 查看详情
c++——浅拷贝深拷贝(代码片段)
这篇blog只是做一个简单的记录,让自己看到这个程序时有一个简单的理解过程,不做任何画图讲解#include<iostream>usingnamespacestd;//前置声明classstring;//计数器classstring_repfriendclassString;public://构造函数explicitstring_rep(constcha... 查看详情
深拷贝与浅拷贝
-------------------siwuxie095 深拷贝 与 浅拷贝 对象间的拷贝没那么简单,大致分为两种情况:一 查看详情
qimage的浅拷贝与深拷贝
首先简单说说什么是浅拷贝和深拷贝:浅拷贝就比如像引用类型,而深拷贝就比如值类型,即浅拷贝是共用一块内存的,而深拷贝是复制一份内容。 我们再来看看QImage类的几个构造函数://浅拷贝QImage(uchar*data,intwidt... 查看详情
c++的深拷贝与浅拷贝
对于普通类型的对象来说,它们之间的复制是很简单的,例如:inta=88;intb=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。 ... 查看详情
js深拷贝与浅拷贝
如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力。functiondeepClone(obj){letobjClone=Array.isArray(obj)?[]:{};... 查看详情
深拷贝与浅拷贝
...员逐一赋值。若类中含有指针类型的数据,这种方式只是简单的把指针的指向赋值给新成员,但并没有给新成员分配内存,因此这种方式必然会导致错误。为了解决浅拷贝出现的错误,必须显示的定义一个拷贝构造函数,使之不... 查看详情
浅拷贝深拷贝
...量互相赋值那么问题来了,如果是普通的赋值其实也就是简单的浅拷贝数据,浅拷贝容易被影响数据,深拷贝则不一样。 以下一个小例子: 为什么b数组删除一个下标,a数组也会被影响呢? 这里就涉及到浅拷贝、深... 查看详情
javascript中的深拷贝和浅拷贝
...boolean、string、number。变量是按值存放的,存放在栈中的简单数据段,可以直接访问。 (2)、引用类型 引用类型包括对象和数组,其 查看详情
深拷贝和浅拷贝的区别(代码片段)
...别在于是否真正获取一个对象的复制实体,和不是引用。简单来说浅拷贝(shallowCopy)只是增加了一个指针指向已存在的内存地址,深拷贝(deepCopy)是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的... 查看详情
深拷贝与浅拷贝
简单的来说就是,在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存(eg:客户端改变数据时,改变的是已经存在的内存中的数据也就是后台数据),而深拷贝就是增加一个指针并且申请一个新的内存,使这个增... 查看详情
对象的扩展运算符(...)深拷贝还是浅拷贝
1、如果只是一层数组或是对象,其元素只是简单类型的元素,那么属于深拷贝(就是一层拷贝,暂时就理解为深拷贝吧!!!!)letaa={age:18,name:'aaa'}letbb={...aa};bb.age=22;console.log(aa.age);//182、如果数组或对象中的元素是引用类型的... 查看详情