淺拷貝 : 如遇到引用型數據,就是複製內存地址
深拷貝 : 複製引用型數據,不是內存地址數組
//第一種
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
複製代碼