JavaScript 的 deepCopy 和 shallowCopy 之间的区别


浅拷贝和深拷贝与语言无关。浅拷贝尽可能少地复制。一个集合的浅拷贝是集合结构的副本,而不是元素的副本。使用浅拷贝,两个集合现在共享各个元素。

示例

let innerObj = {
   a: 'b',
   c: 'd'
}
let obj = {
   x: "test",
   y: innerObj
}
// Create a shallow copy.
let copyObj = Object.assign({}, obj);
// Both copyObj and obj's prop y now refers to the same innerObj. Any changes to this will be reflected.
innerObj.a = "test"
console.log(obj)
console.log(copyObj)

输出

{ x: 'test', y: { a: 'test', c: 'd' } } 
{ x: 'test', y: { a: 'test', c: 'd' } } 

请注意,浅拷贝不会递归地创建克隆。它只在顶层进行。

深拷贝复制所有内容。一个集合的深拷贝是两个集合,其中原始集合中的所有元素都被克隆。

示例

let innerObj = {
   a: 'b',
   c: 'd'
}
let obj = {
   x: "test",
   y: innerObj
}
// Create a deep copy.
let copyObj = JSON.parse(JSON.stringify(obj))
// Both copyObj and obj's prop y now refers to the same innerObj. Any changes to this will be reflected.
innerObj.a = "test"
console.log(obj)
console.log(copyObj)

输出

{ x: 'test', y: { a: 'test', c: 'd' } } 
{ x: 'test', y: { a: 'b', c: 'd' } } 

更新日期: 2019-09-16

183 次浏览

开启你的 事业

完成该课程,获得认证

开始
广告