前端面试题|深拷贝和浅拷贝

【前端面试题|深拷贝和浅拷贝】浅拷贝(shallowCopy)只是增加了一个指针指向已存在的内存地址,
深拷贝(deepCopy)是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存,
使用深拷贝的情况下,释放内存的时候不会因为出现浅拷贝时释放同一个内存的错误。
浅复制:仅仅是指向被复制的内存地址,如果原地址发生改变,那么浅复制出来的对象也会相应的改变。
深复制:在计算机中开辟一块新的内存地址用于存放复制的对象。
深拷贝实现

const obj1 = { age: 20, name: 'kayo', address: { city: 'beijing' }, arr: ['a', 'b', 'c'] }const obj2 = deepClone(obj1); //浅拷贝 // const obj2 = obj1; obj2.address.city = 'shanghai'; obj2.arr[0] = 'a1'; console.log(obj1.address.city); console.log(obj1.arr[0]); /** * 深拷贝 * {Object} obj 要拷贝的对象 */ function deepClone(obj = {}) { if (typeof obj !== 'object' || obj == null) { //obj是null,或者不是对象和数组,直接返回 return obj; } //初始化返回结果 let result if (obj instanceof Array) { result = []; } else { result = {}; } for (let key in obj) { //看一下每个key是不是这个对象自己所拥有的属性,保证key不是原型的属性 if (obj.hasOwnProperty(key)) { //递归调用!!! result[key] = deepClone(obj[key]); } } //返回结果 return result; }


    推荐阅读