浅拷贝与深拷贝

元气小坏坏 提交于 2020-02-21 04:45:24

一、浅拷贝
1.1、浅拷贝指只拷贝一层,更深层次级别的只拷贝引用

<script>
var obj = {
	id: 1,
	name: 'andy'
	msg:{
		age: 16
	}
} 
var o = {
	for(var k in obj) {
		// k 是属性名 obj[k]是属性值
		// 将对象obj中的值拷贝给对象o
		o[k] = obj[k]
	}
}
console.log(o) 
o.msg.age = 20
console.log(obj) // 当改变o中的age时obj中的age = 20

// 浅拷贝语法糖
// Object.assign(target,...sources)
Object.assign(o,obj) // 将obj拷贝给o 
</script>

备注: 浅拷贝当遇见深层次的拷贝时只会将地址拷贝(而不是开辟新的地址)

二、深拷贝
2.1、深拷贝拷贝多层,每一级别的数据都拷贝

<script>
var obj = {
	id: 1,
	name: 'andy'
	msg:{
		age: 16
	}
}
var o = {};
// 封装函数
function deepCopy(newobj,oldobj) {
	for(var k in oldobj) {
		// 判断我们的属性值属于那种数据类型
		// 1、获取属性值 
		var item = oldobj[k]
		if(item instanceof Array) {
			oldobj[k] = []
			deepCopy(newobj[k],item)  // 函数递归,将item的值赋值给newobj
		} else if(item instanceof Object) {
			oldobj[k] = {}
			deepCopy(newobj[k],item)  // 函数递归,将item的值赋值给newobj
		}else {
			newobj[k] = item
		}
	}
} 
deepCopy(o,obj)
</script>

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!