let a = {
age: 1
}
let b = a
a.age = 2
console.log(b.age) // 2
在JavaScript中,我们了解对象类型在赋值的过程中其实是复制了地址,从而会导致改变了一方其他也都被改变的情况。通常在开发中我们不希望出现这样的问题,我们可以使用浅拷贝来解决这个情况。
浅拷贝
首先可以通过Object.assign来解决这个问题,很多人认为这个函数是用来深拷贝的。其实并不是,Object.assign只会拷贝所有的属性值到新的对象中,如果属性值是对象的话,拷贝的是地址,所以并不是深拷贝。
let a = {
age: 1
}
let b = Object.assign({}, a)
a.age = 2
console.log(b.age) // 1
另外我们还可以通过展开运算符...来实现浅拷贝
let a = {
age: 1
}
let b = { ...a }
a.age = 2
console.log(b.age) // 1
通常浅拷贝就能解决大部分问题了,但是当我们遇到如下情况就可能需要使用到深拷贝了
let a = {
age: 1,
jobs: {
first: 'FE'
}
}
let b = { ...a }
a.jobs.first = 'native'
console.log(b.jobs.first) // native
本文介绍了JavaScript中浅拷贝和深拷贝的概念,浅拷贝可通过`Object.assign()`和展开运算符实现,但仅处理第一层属性。深拷贝通常用`JSON.parse(JSON.stringify(obj))`解决,但该方法存在局限性,如忽略函数、不能序列化某些内置类型及处理循环引用。推荐使用lodash的深拷贝函数以处理复杂场景。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



