// 浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用,只是拷贝的地址。
// 深拷贝靠拷贝多层,每一级别的数据都会拷贝。
var obj = {
id: 1,
name: 'andy',
msg: {
age : 18
}
};
var o = {};
for (var k in obj){
// k 是属性名,obj[k] 属性值
o[k] = obj[k];
}
console.log(o);
o.msg.age = 20;
console.log(obj);
浅拷贝:语法糖
1、Object.assign(o,obj);
深拷贝:语法糖
开辟新空间。函数递归。不会对原来的对象有影响。
var o = {};
// 封装函数
function deepCopy (newobj, oldobj) {
for (var k in oldobj) {
// 判断我们的属性值属于哪种数据类型
// 1、获取属性值 oldobj[k]
var item = oldobj[k];
// 判断这个值是否是数组
if (item instanceof Array) {
newobj[k] = [];
deepCopy(newobj[k],item)
} else if (item instanceof Object) {
//判断这个值是否是对象
newobj[k] = {};
deepCopy(newobj[i],item)
} else {
//简单数据类型
newobj[k] = item;
}
}};
deepCopy(o,obj);
os.msg.age = 30;