JS深拷贝

77 阅读1分钟

深拷贝是拷贝多层,每一级别的数据都会拷贝出来;

深拷贝是在堆里面开辟一块新的内存空间,将堆里面要拷贝的原对象拷贝一份放到新的内存空间。

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

\