单层数据深拷贝:jquery
concat slice Object.assign() 展开运算符... demo: let arr=[2,3,4,5]; let arr1=[].concat(arr); let arr2=arr1.slice(0); let arr3=[...arr1]; let arr4=Object.assign([],arr1);
可是若是多层数据,就不行了,就是slice和concat只能实现首层深拷贝spa
多层数据深拷贝能够使用JSON.stringfy JSON.parseprototype
let obj={name:'zhangsan',arr:[2,3,4,5],obj:{age:2,sex:'male'}};code
let obj1=JSON.parse(JSON.stringfy(obj));blog
可是元素不能是undefined和function(在转换过程当中会被忽略)递归
深层拷贝实现使用递归:get
function deepClone(obj){ const targetObj=Object.prototype.toString.call(obj)=="[Object Array]"?[]:{}; for(let key in obj){ if(obj.hasOwnProperty(key)){ if(targetObj[key]&&typeof targetObj[key]=='object'){
targetObj[key]=deepClone(targetObj[key]);
}else{ targetObj[key]=obj[key]; } } } return targetObj; }
也能够借助jquery的extend方法实现深拷贝:string
$.extend([deep],targetObj,obj1 [,objn]);io
deep表示是否深拷贝,为true为深拷贝,为false则为浅拷贝function
let obj={a:2,b:3,obj:{c:4,d:5}};
let obj1=$.extend(true,{},obj);