深浅拷贝

88 阅读1分钟

1.深浅拷贝等区别

浅拷贝:浅拷贝引用类型时,源对象也会被修改;

深拷贝:深拷贝就是完全拷贝了一份新的对象,修改拷贝对象不会影响到源对象;

2.如何实现深浅拷贝

浅拷贝

var arr1 = ['a','b','c','d'];

var arr2 = arr1 ;

arr1[0]= '0';

arr2[1]= '1';

console.log(arr1,arr2); // ['0','1','c','d'],['0','1','c','d']

深拷贝

方法1:ES6的展开语法

let a = { name:'张三', age:18 }

let b = { ...a };

b.name = '李四';

console.log(a.name,b.name); // '张三','李四'

方法2:JSON.parse(JSON.stringify(待拷贝对象))

var arr1 = ['a','b','c','d'];

var arr2 = JSON.parse(JSON.stringify( arr1 ));

arr1[0]= '0';

arr2[1]= '1';

console.log(arr1,arr2); // ['0','b','c','d'],['a','1','c','d']

3.手写递归的方式来实现深拷贝

var obj1 = { a:1, b:2, arr:['a','b','c','d'] }

function copyObj( obj ){

var newObj = Array.isArray(obj)?[]||{};
for(var key in obj){
    if(typeof obj[key] == 'object'){
        newObj[key] = copyObj(obj[key]);
    }else{
        newObj[key] = obj[key];
    }
}
return bewObj;

}

var obj2 = copyObj(obj1);