js深克隆 浅克隆 待补充

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 }


浅复制:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值