一、浅拷贝
1、浅拷贝就是创建一个新的对象,这个对象有着原始对象的属性值得精准拷贝
2、如果属性是一个基本数据类型,拷贝就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址,
所以其中一个对象改变了地址就会影响到另一个对象
二、深拷贝
1、深拷贝就是把一个对象,从内存中完整的拷贝出来,从堆内存中开辟了新区域,用来存新对象,并且修改新对象不会影响原对象
一、浅拷贝 赋值的区别
1.赋值 当我们把一个对象赋值给一个新的变量时,赋的是该对象在栈中的内存地址,而不是堆中的数据。也就是两个对象
指向同一个内存空间,无论哪个对象发生改变,其实都是改变的储存空间的内容,因此两个对象都是联动的。
2、浅拷贝:重新在堆中创建内存,拷贝前后对象的基本数据类型互不影响,但拷贝前后对象的引用类型因共享一
块内存,会相互影响。
3、深拷贝:从堆内存中开辟了一个新的区域存放新对象,对对象中的子对象进行递归拷贝,拷贝前后的两个对象互不影响
a instanceOf b b 的prototype 是否在a的原型链上
浅拷贝的实现方式
1、object.assign() 2、lodash 里面的 _.clone 3、...扩展运算符 4、 Array.prototype.concat 5、 Array.prototype.clice
深拷贝的实现方式
1、 JSON.parse(JSON.stringify())
2、递归操作
3、cloneDeep
4、Jquery.extend()
var arr = { // 赋值
value: ['你', '好', '丑'],
name: '丑男',
}
var newArr = arr
newArr.name = '帅哥'
newArr.value[2] = '帅'
newArr.value[0] = '我'
console.log(arr);
console.log(newArr);