JavaScript之深拷贝和浅拷贝

一、概念

浅拷贝:浅拷贝只是拷贝一层,更深层次的拷贝只拷贝引用(拷贝最外面一层)
注意:如果浅拷贝要拷贝多层数据,只会拷贝地址

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


浅拷贝:

第一种方法:

	var obj={
		name:"zhangsan",
		age:"10"
	}
	var o={}
	for(var i in obj){
		o[i]=obj[i]
	}
	console.log(o)

在这里插入图片描述
第二种方法(ES6)新增的:

Object.assign(target,sources)
*target:拷贝给谁
*sources:拷贝哪个对象

var obj={
		name:"zhangsan",
		age:"10"
	}
var o={}
console.log(Object.assign(o,obj))

在这里插入图片描述
深拷贝

	var obj={
		name:"zs",
		age:"10",
		msg:{
			city:"bj"
		},
		color:['红色','黄色']
	}
	var o={};
	function deepClone(newobj,oldobj){
		for(var k in oldobj){
			//判断属性值属于哪种数据类型
			//获取属性值 oldobk[k]
			var item=oldobj[k];
			//判断是否是数组
			if(item instanceof Array){
				newobj[k]=[];
				deepClone(newobj[k],item)
			}
			//判断是否是对象
			else if(item instanceof Object){
				newobj[k]={};
				deepClone(newobj[k],item)
			}else{
				//属于简单数据类型
				newobj[k]=item;
			}
		}
	}
	deepClone(o,obj);
	console.log(o);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值