1,浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用
2,深拷贝多层,每一级别的数据都会拷贝
3,Object.assign() es6新增加浅拷贝
浅拷贝
//定义一个对象obj
var obj = {
id: 1,
name: 'andy',
msg: {age: 18}
};
//创建一个o空对象存放
var o = {};
//遍历对象 k是属性名, obj[k]属性值
for(var k in obj){
o[k] = obj[k]; //浅拷贝
}
// 语法糖 可以将for遍历替换 浅拷贝es6新增
Object.assign(o, obj)
//打印一下o对象
console.log(o);
o.msg.age = 22; //要注意浅拷贝修改属性值是会改变原来的属性值哦
console.log(obj);
深拷贝
//创建obj对象
var obj = {
id: 1,
name: 'andy',
msg: {age: 18},
color:['pink','red']
};
//创建o空对象存放
var o = {};
//封装函数deepCopy
function deepCopy(newobj,oldobj){
for(var k in oldobj){
//判断我们的属性是属于那种数据类型:
//1,获取属性值 oldobj[k]
var item = oldobj[k];
//2.判断这个值是否是数组
if(item instanceof Array){
newobj[k] = []; //相当于 o.color = []
deepCopy(newobj[k],item)
} else if(item instanceof Object){
//3.判断这个值是否是对象
newobj[k] = {};
deepCopy(newobj[k],item
} else{
//4.属于简单数据类型
newobj[k] = item
}
}
}
deepCopy(o,obj);
console.log(o);
o.msg.age = 30; //深拷贝赋值不会改变原来的属性值
console.log(obj);