一招快速区分深拷贝和浅拷贝!
先上结论: 除了JSON.parse(JSON.Stringify(obj))和手写深拷贝方法,其他都可以认为是浅拷贝。
核心知识点: 基本类型的拷贝是直接值拷贝,引用类型的拷贝是引用地址的拷贝。因此,只要是共用了引用地址,任意一个引用者发生变化都会影响其他引用者。
应用场景: 如果希望新对象和原对象完全独立不相互影响,使用深拷贝,其他情况可根据实际需要确定使用浅拷贝或者深拷贝。
深拷贝的方法
- 方法1:
let obj_copy = JSON.parse(JSON.stringify(obj))
- 方法2:
// 手写深拷贝
function deepCopy(obj) {
if (typeof obj !== 'object') return obj
let newObj = Array.isArray(obj) ? [] : {}
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
//基本类型的值直接复制,引用类型的值递归调用
newObj[key] = typeof obj[key] === 'object' ? deepCopy(obj[key]) : obj[key]
}
}
returnnewObj
}
浅拷贝的方法
部分示例:
1.Object.create(obj)
2.Object.assign({},obj)
3.concat():数组的方法,里面包含引用类型元素
4.slice():数组的方法,里面包含引用类型元素
5.解构
6.arr.toRreversed().reverse():两次反转
写在后面: 最近离职了,正在找工作,提了离职后才发现工作真难找,远比自己想象的要难得多,尽管试出了水有多深,也看明白了前方的路不好走,尽管老板也说你不想走随时可以留下,无论这句话真假,哈哈哈,都决心要走!因为困难是当下,但是自己看清的和要坚持走下去的路却仅非当下,所以,祝自己好运吧,也祝当前也在找工作的小伙伴们好运。