深浅拷贝:直接赋值给的是地址,如果修改赋值后的变量,实际上连同原变量的值一并修改了。
浅拷贝
展开运算符 {...obj} 拷贝对象
Object.assign(新,旧)
深拷贝
递归:自己调用自己
以下实际是浅拷贝
递归调用处理数组问题 ,同样要是对象那么就是 newObject[k] = { }
js库实现深拷贝
Lodash:引入库,再使用 const o = _.cloneDeep(obj)
但是这个使用之前还是要进行引入,有些麻烦。解决办法:使用JSON实现深拷贝
JSON.stringify(obj)将对象转换为字符串。原本的对象是复杂数据类型,栈中存储的是对象所在的堆中的地址,转换为字符串之后是简单数据类型,栈中直接存储该值。
如果再将字符串转化为对象,那么就会在堆中重新开辟内存存储对象,在栈中存储该地址,那么栈中存储的原本对象的地址和如今经过JSON转换为字符串再转换为对象的地址都不一样了,这也就是完成了拷贝