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);