浅拷贝和深拷贝

浅拷贝

1.浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用

Object.assign(target,sources)  // es6新增方法可以浅拷贝
var obj = {
id:1,
msg:{
age:18
}
};
var 0 = {};
// for in可实现浅拷贝
for(var k in obj){
// k是属性名 obj[k] 属性值
o[k] = obj[k]
}
console.log(o);

浅拷贝只是把更深层次的对象的地址拷贝给了o,o和obj指向的是同一个数据,修改了其中任何一个数据,都会影响另外一个数据(及它俩所指向的内存地址是一样的)

深拷贝

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

拷贝出来的数据单独暂居一个空间,并不会影响原来的数据

var obj = {
id: 1,
name: 'andy',
msg: {
age: 18
},
color: ['pink','red']
};
var o = {};
// 递归
function deepCopy(newObj, oldObj){
for(var k in oldObj){
// 判断我们的属性值属于哪种数据类型
//1. 获取属性值 oldObj[k]
var item = oldObj[k];
//2.判断这个值是否是数组
if(item instanceof Array){
newObj[k] = [];
deepCopy(newObj[k], item)
} else if (item instanceof Object){
//3.判断这个值是否是对象
newObj[k] = {};
deepCopy(newObj[key], item)
} else {
// 4.属于简单数据类型
newObj[k] = item;
}
}
}
deepCopy(o, obj)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容