浅拷贝和深拷贝

Martin

区别:

浅拷贝:对于一些基本数据类型的拷贝 —-储存在栈内存

Object.assgin()

深拷贝:对复杂(引用)数据类型的拷贝 —-储存在堆内存

JSON.parse(JSON.Stringify(obj))

实现一个深拷贝:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function deepClone (obj) {
// 判断 如果是简单数据类型 或者是null直接返回
if (obj === null || obj === '' || typeof obj !== 'object') {
return obj
}
let newObj = Array.isArray(obj) ? [] : {}
for (key in obj) {
if (obj.hasOwnProperty(key)) {
// 递归调用
newObj[key] = deepClone(obj[key])
}
}
return newObj
}