es6对象拷贝

es6 对象深拷贝和浅拷贝

let obj1 = { a: 0 , b: { c: 0}}; 
let obj2 = Object.assign({}, obj1); 
console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}} 
//第一层次是深拷贝
obj2.a = 1; 
console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}} 
console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}} 
//第二层次是浅拷贝
obj2.b.c = 3; 
console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 3}} 
console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 3}} 

// 深拷贝 
obj1 = { a: 0 , b: { c: 0}}; 
let obj3 = JSON.parse(JSON.stringify(obj1)); 
obj1.a = 4; 
obj1.b.c = 4; 
console.log(JSON.stringify(obj3)); // { a: 0, b: { c: 0}}
 

//====Object.assign=====
//----------------对象拷贝--第一层次深拷贝----------------
let data =  {nm:'nm1',age:1} ;
let target={} 
//深拷贝
Object.assign(target,data);
target.nm='nmtarget'
alert(JSON.stringify(data));//{nm:'nm1',age:1}
//----------------数组拷贝--浅拷贝----------------
let arrdata =  [{nm:'nm1',age:1}] ;
let arrtarget=[]
//浅拷贝
Object.assign(arrtarget,arrdata);
arrtarget[0].nm='nmtarget'
alert(JSON.stringify(arrdata));//{nm:'nmtarget',age:1}

//====扩展运算符...=====
//----------------对象拷贝--第一层次深拷贝----------------
let data =  {nm:'nm1',age:1} ;
let target={...data} 
target.nm='nmtarget'
alert(JSON.stringify(data));//{nm:'nm1',age:1}
//----------------数组拷贝--浅拷贝----------------
let arrdata =  [{nm:'nm1',age:1}] ;
let arrtarget=[...arrdata]
arrtarget[0].nm='nmtarget'
alert(JSON.stringify(arrdata));//{nm:'nmtarget',age:1}

=============对象操作===========

//------深拷贝
let a={title:'1'};
let b={...a,title:"2"};
console.log(JSON.stringify(a));//{"title":"1"}
console.log(JSON.stringify(b));//{"title":"2"}

a={title:'1'};
b={...a};
b.title='2';
alert(JSON.stringify(a));//{"title":"1"}
alert(JSON.stringify(b));//{"title":"2"}

//------浅拷贝
a={title:'1'}
b=a;
b.title='2';
alert(JSON.stringify(a));//{"title":"2"}
alert(JSON.stringify(b));//{"title":"2"}

=============数组拷贝==========
let data = [{nm:'nm1',age:1},{nm:'nm2',age:2}];
 
 //深拷贝
let cacheData = data.map(item => ({ ...item }));
cacheData[0].nm='nmcacheData'
alert(JSON.stringify(data));

//浅拷贝
let  Data1 = data ;
Data1[0].nm='nmData1'
alert(JSON.stringify(data)); 

//浅拷贝
let  Data2 =[...data];
Data2[0].nm='nmData2'
alert(JSON.stringify(data)); 

 

https://blog.csdn.net/Dong8508/article/details/83338847

 

const object1 = {
  a: 1,
  b: 2,
  c: 3
};
 
const object2 = Object.assign({c: 4, d: 5}, object1);
console.log(object2);
 
> Object { c: 3, d: 5, a: 1, b: 2 }
 
这是浅拷贝,返回的不是一个新对象,而是把一个或多个源对象添加到目标对象
 
 
let object1 = {
  a: 1,
  b: 2,
  c: 3
};
 
let object2 = {...object1};
object1.a=11;
 
console.log(object2);
> Object { a: 11, b: 2, c: 3 }
 
这也是浅拷贝

 

let object1 = {
  a: 1,
  b: 2,
  c: 3
};
 
let object2 =JSON.parse( JSON.stringify(object1));
object2.a=11;
 
console.log(object1,object2);
 
> Object { a: 1, b: 2, c: 3 } Object { a: 11, b: 2, c: 3 }

https://www.cnblogs.com/xbblogs/p/8954165.html

==========浅拷贝1=========
function clone(origin) {
  return Object.assign({}, origin);
}

==========浅拷贝2=========

function clone(origin) {
  return JSON.parse(JSON.stringify(origin))
}
==========深拷贝1=========
function clone(origin) {
  let originProto = Object.getPrototypeOf(origin);
  return Object.assign(Object.create(originProto), origin);
}

==========深拷贝2=========

function clone(obj){
    return  Object.create(
      Object.getPrototypeOf(obj),
      Object.getOwnPropertyDescriptors(obj)
    )
}

 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值