浅拷贝
1.概念
新旧对象共用一个内存,原属性是基本类型,拷贝的是基本类型的值,原属性是引用类型,拷贝的是内存地址 。基本类型之前互不影响,引用类型其中一个对象改变了地址,就会影响另一个对象
补充:基本类型:字符串(string)、数值(number)、布尔值(boolean)、undefined、null ;
引用类型:对象(Object)、数组(Array)、函数(Function)
2.示例
let obj1 = { name: '威v', music: { title: 'lovetalk'}};
let obj2 = {... obj1};
obj2.name = 'wayv';
obj2.music.title = '梦想发射'
console.log('obj1',obj1)
// obj1 { name: '威v', music: { title: '梦想发射'}}
console.log('obj2',obj2)
// obj2 { name: 'wayv', music: { title: '梦想发射'}}
3.浅拷贝方法
3.1 es6结构:let obj2 = {... obj1}
3.2 Object.assign():let obj2 = Object.assign({},obj1)
3.3 Array.prototype.slice():var arr = ['男团',{name:'威神v'}]; let arr1 = arr.slice()
3.4 Array.prototype.concat():var arr = ['男团',{name:'威神v'}]; let arr1 = arr.concat()
深拷贝
1.概念
堆内存中划分新区域存放对象,拷贝对象与原对象不共享内存,修改新对象不影响原对象
2.示例
let obj1 = { name: '威v', music: { title: 'lovetalk'}};
let obj2 = JSON.parse(JSON.stringify(obj1));
obj2.name = 'wayv';
obj2.music.title = '梦想发射';
console.log('obj1',obj1)
// obj1 { name: '威v', music: { title: 'lovetalk'}}
console.log('obj2',obj2)
// obj2 { name: 'wayv', music: { title: '梦想发射'}}
3.深拷贝方法
3.1 JSON.parse(JSON.stringify()):let obj2 = JSON.parse(JSON.stringify(obj1));
3.2 jQuery.extend():let obj2 = $.extend(true, {}, obj1);