浅拷贝只是拷贝一层,更深层次对象的级别只拷贝引用,当修改深层次的对象的属性值时,原来的对象的属性值也会改变
浅拷贝实现:
1、ES5实现方法:
var obj = {
id:1,
name:'andy',
msg:{
age:18
}
}
var o = {}
for(var k in obj){
o[k] = obj[k];
}
console.log(o);
2、ES6实现方法:
Object.assign(o, obj);
深拷贝是会进行每一级别的数据都会进行拷贝
递归实现深拷贝:
var obj = {
id:1,
name:'andy',
msg:{
age:18
}
}
var o = {}
// 深拷贝
function deepCopy(newObj, oldObj){
for(var k in oldObj){
// 获取值
var item = oldObj[k];
// 进行值的判断
// 数组
if(item instanceof Array){
newObj[k] = [];
deepCopy(newObj[k],item);
}else if(item instanceof Object){
newObj[k] = {},
deepCopy(newObj[k],item);
}else{
// 属于简单类型
newObj[k] = item;
}
}
}
deepCopy(o, obj);