在JavaScript中复制对象的不同技术

有两种以任何语言复制对象的方式,即深层复制和浅层复制。

浅拷贝和深拷贝是不可知的语言。浅拷贝应尽可能少地重复。集合的浅表副本是集合结构的副本,而不是元素。对于浅表副本,现在两个集合共享各个元素。

示例

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' } }