深拷贝 浅拷贝

浅拷贝:只拷贝一层,更深层次的对象只拷贝引用(即对象的地址)。
缺点:由于浅拷贝拷贝的是对象的地址,因此 当你将一个对象A拷贝给对象B,这个时候修改对象B中的深层次的对象属性时,对象A的该属性也会被修改。
当然,缺点和优点在不同的场景下 ,是会发生转变的

//es6提供的浅拷贝语法糖
//target:你要拷贝的目标  sources被拷贝的对象
Object.assgin(target,...sources)
//js实现
var obj={
	id:1,
	name:"张三",
	act:{
		sing:"夜曲"
	}
}
var o={}
//key:属性名 obj[key]:属性值
for(var key in obj){
	o[key]=obj[key]
}
//最后可以尝试修改o中的对象属性,看看obj的对应属性会不会被修改
o.act.sing="一路向北";
console.log(o)
console.log(obj)
//最后会发现都被修改了

深拷贝:拷贝多层,每一级别的数据都会拷贝。

//js实现 深拷贝
var obj={
	id:2,
	name:"李四",
	act:{
		sing:"枫"
	},
	hobbies:['read','game']	
}

var o={}

//封装函数
function deepCopy( newObj , oldObj ) {
	for(var key in oldObj){
		var item= oldObj[key];
		//判断对象类型
		//注意 这里Array也属于Object类型,所以将Array先判断
		if( item instanceof Array){
			newObj[key]=[];
			//这里往深层递归
			deepCopy(newObj[key],item );
		}else if(item instanceof Object){
			newObj[key]={};
			deepCopy(newObj[key],item );
		}else{
			newObj[key]=item;
		}
	}
}

//调用函数
deepCopy(o,obj);
//验证
console.log(o);
o.act.sing="珊瑚海";
console.log(obj.act.sing);//输出为 枫
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值