主要区别:浅拷贝只是引用变量的内存地址,深拷贝复制真正的值

浅拷贝

Object.assign 、展开运算符(…)

深拷贝

使用 JSON.parse(JSON.stringify(object))

局限性

  • 会忽略 undefined
  • 会忽略 symbol
  • 不能序列化函数
  • 不能解决循环引用的对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function deepClone(obj) {
if (typeof obj !== 'object' || obj === null) {
return obj
}
let newObj
if (Array.isArray(obj)) {
newObj = []
} else {
newObj = {}
}
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
if (typeof obj[key] === 'object') {
newObj[key] = deepClone(obj[key])
} else {
newObj[key] = obj[key]
}
}
}
return newObj
}