JavaScript的深拷贝与浅拷贝

JavaScript的深拷贝与浅拷贝

对于字符串类型,浅复制是对值的复制,对于对象来说,浅复制是对对象地址的复制,没有开辟新的内存,也就是复制的结果是两个对象指向同一个地址,修改其中一个对象的属性,则另一个对象也会改变,而深复制是开辟新的地址,两个对象对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var cloneObj = function (obj) {
var str, newobj = obj.constructor === Array ? [] : {}
if (typeof obj !== 'object') {
return
} else if (window.JSON) {
str = JSON.stringify(obj)
newobj = JSON.parse(str)
} else {
for (let i in obj) {
newobj[i] = typeof obj[i] === 'object'? cloneObj(obj[i]) : obj[i]
}
}
return newobj
}