js深浅拷贝
浅拷贝进行拷贝时只会复制指向某个对象的指针,而不会复制对象的本身,新旧对象还是共用同一块内存,当我们修改其中一个对象内容的时候,另一个也会受到影响。深拷贝的话进行拷贝时就是创建一个与旧对象完全一样的的对象,新对象和旧对象不共用同一块内存,修改其中一个对象的内容另外一个不会受到牵连。
浅拷贝方法:
1.通过Object.assign
function shallowcopy(obj){ return newobj = Object.assign({},obj); }
2.通过Array.prototype.concat(),只能传数组
function shallowcopy(obj) { return newobj = obj.concat(); }
3.通过Array.prototype.slice(),只能传数组
function shallowcopy(obj) { return newobj = obj.slice(); }
4.通过循环
function shallowcopy(obj) { var newobj = {}; for (var prop in obj) { if (obj.hasOwnProperty(prop)) { newobj[prop] = obj[prop]; } } return newobj; }
深拷贝方法:
1.通过JSON.parse(JSON.stringify()),这种办法无法实现对对象中方法的深拷贝
function deepcopy(obj) { return newobj = JSON.parse(JSON.stringify(obj)) }
2.通过循环
function deepcopy(obj) { let newobj = Array.isArray(obj) ? [] : {}; if (obj && typeof obj === 'object') { for (key in obj) { if (obj.hasOwnProperty(key)) { if (obj[key] && typeof obj[key] === 'object') { newobj[key] = deepcopy(obj[key]) } else { newobj[key] = obj[key]; } } } } return newobj; }