深度拷贝

深拷贝

1
2
3
4
5
6
7
8
9
10
11
12
13
const b = [1, 2, 3, 4, { value: 123 }]
const a = b.concat([]) // a = b or a = [...b] or a = JSON.parse(JSON.stringify(b)) or a = Object.values(Object.assign({}, b))
a.push(5)
a[4].value = 321
a[0] = 2

console.log(a, b)
a = b 结果:[2,2,3,4,{value: 321},5]
a = [...b] 结果:a: [2,2,3,4,{value: 321},5] b:结果:[1,2,3,4,{value: 321}]

([...b] or b.concat([]) or Object.values(Object.assign({}, b)),三种结果一致,对数值或字符串基础类型进行深拷贝,对象,数组等引用类型是浅拷贝)

a = JSON.parse(JSON.stringify(b)) 结果:a: [2,2,3,4,{value: 321},5] b:结果:[1,2,3,4,{value: 123}] 完全深拷贝(无法拷贝函数)