js的数据类型:
基本类型:number boolean string null undefined
引用类型: object(函数 array object)
浅克隆:把数据的地址赋给变量,而没有把具体的数据复制给变量,变量会随数据值的变化而变化。引用类型的赋值为浅克隆
深克隆:把数据的值付给变量,从而产生一个与源数据不相干的新数据(数据地址已变化)。基本类型的赋值为深克隆
1 var a = {w1:2,w2:3} 2 var a1= a; 3 alert(a1);//{w1:2,w2:3} 4 var a={x1:7,x2:8} 5 alert(a1);//{w1:2,w2:3}上代码为浅复制,a1指向a的地址,第四行把a的地址变了,而a1指向的仍然是原来的地址,故值不变。
1 1 var a = {w1:2,w2:3} 2 2 var a1= a; 3 3 alert(a1);//{w1:2,w2:3} 4 4 a1.w1="邓"; 5 5 alert(a);//{w1:"邓",w2:3}上代码为浅复制,原地址的值变了。
1 var a = 3578; 2 var a1 = a; 3 alert(a1);//3578 4 a=8735; 5 alert(a1);//3578上代码为深复制。
代码:代码
深复制:
function clone(obj){ 2 var o=[]; 3 if(obj.constructor== Array) { 4 o=obj.slice(0); 5 }else{ 6 o={}; 7 for(var i in obj){ 8 o[i] = typeof obj[i] === "object" ? obj[i].clone() : obj[i];} 9 } 10 return o; 11 12 }
浅复制: