js 浅拷贝和深拷贝原理

js 浅拷贝和深拷贝原理

拷贝,从字面意思上解释即为将原有的东西,复制一份出来;在代码中,我们如何解释呢?
在代码中,拷贝分为了两种形式:一种是浅拷贝,一种是深拷贝。

什么是浅拷贝

通俗的讲:就是把父对象的内容,全部拷贝给子对象。然而,实际上是,子对象只获得了父对象的一个内存地址。那么,子对象改变值,父对象的值也会被篡改。

  • 浅拷贝 ---- 此拷贝会改变原有值
    1.赋值拷贝

    	var p = {"color":'red'};
    	var p1 = p;
    	p1.color = 'blue';
    	console.log(p);
    

    2.使用方法赋值拷贝

    	var obj = {"name":'Join',"age":30,"fruit":{"apple":5,"pear":6}};
    	var obj1 = copy(obj);
    	obj1.name = 'Tom';
    	obj1.fruit.apple = 10;
    	console.log(obj);
    
    	function copy(obj){
    		var result = {};
    		for(var key in obj){
    			result[key] = obj[key];
    		}
    		return result;
    	}
    
什么是深拷贝

与浅拷贝不同的是,深拷贝后,父对象的内容不会因为子对象的内容改变而改变。

  • 深拷贝 — 此拷贝不会改变原有值,即使用递归的方式操作

    	var car = {"name":{"Benz":{"color":"red"},"BMW":{"color":"black"}}};
    	var car1 = deepCopy(car);
    	car1.name.Benz.color = "white";
    	console.log(car);
    
    	function deepCopy(obj){
    		var res = {};
    		for(var key in obj){
    			if(typeof obj[key] == "object"){
    				res[key] = deepCopy(obj[key]);
    			}else{
    				res[key] = obj[key];
    			}
    		}
    		return res;
    	}
    

对于上面的拷贝方式,在jquery中,extend() 方法使用的就是上面的原理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值