深淺拷貝的方法(兩種)
淺拷貝 : 如遇到引用型資料,就是複製記憶體地址
深拷貝 : 複製引用型資料,不是記憶體地址
//第一種
var obj1 = {
name : ["SJL", "YL"],
age : {
age : 18
}
};
//拷貝的只有陣列和JSON物件,以這兩個為例
function clone(data, deep){
//deep引數 : true為深拷貝 false為淺拷貝
var obj = {}; //初始為物件
if(data instanceof Array){
//data instanceof Array :確定Array是否存在於傳入資料物件的原型鏈上,如果存在則表示是陣列,反之為{}
//能進來則一定是陣列,所以
obj = [];
}
//for in 遍歷
for(var key in data){
var value = data[key]; //存值
if(deep && typeOf value === "object" && value !=== null){
obj[key] = clone (value, deep);
/*當deep為true 並且型別為object 並且不為null,則再進行一次深拷貝,typeOf null 為object*/
}else{
obj[key] = value;
}
}
return obj ;
}
var obj2 = clone(obj1, false);
複製程式碼
//第二種
//用JSON.stringify和JSON.parse方法
var obj1 = {
x : ["1", "2"],
y : {
name : "SJL"
}
};
var obj2 = JSON.parse(JSON.stringify(obj1));
//先用JSON.stringify()將物件轉成字串,再用JSON.parse()轉為物件
//注: stringify會過濾function
複製程式碼