淺拷貝和深拷貝

單層數據深拷貝: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);

相關文章
相關標籤/搜索