深拷贝是拷贝多层,每一级别的数据都会拷贝出来;
深拷贝是在堆里面开辟一块新的内存空间,将堆里面要拷贝的原对象拷贝一份放到新的内存空间。
for...in实现
var obj={a:1,b:{c:2}}
function clon(obj){
var newObj={}
for(key in obj){
if(typeof obj[key]==="object"){
newObj[key]=clon(obj[key])
}else{
newObj[key]=obj[key]
}
}
return newObj
}
JSON实现
用JSON.stringify把 对象 转成 字符串 ,再用JSON.parse把 字符串 转成新的对象。
var obj1 = { body: { a: 10 } };
var obj2 = JSON.parse(JSON.stringify(obj1));
obj2.body.a = 20;
console.log(obj1);
// { body: { a: 10 } }
console.log(obj2);
// { body: { a: 20 } }
console.log(obj1 === obj2);
// false
console.log(obj1.body === obj2.body);
// false
\