var obj = {
name: 'anana',
msg: {
age: 18
},
color: ['pink', 'red']
}
var o = {} // 拷贝的新对象
function deepClone(newobj, oldobj) {
for (k in oldobj) {
// 拿到对象中的属性值
let item = oldobj[k]
// 如果属性值是数组
if (item instanceof Array) {
newobj[k] = []
deepClone(newobj[k], item)
}
// 如果属性值是对象
else if (item instanceof Object) {
newobj[k] = {}
deepClone(newobj[k], item)
}
// 属性值是普通数据类型
else {
newobj[k] = item
}
}
}
deepClone(o, obj)
o.name = 'hhh' // 改变新拷贝的对象的 name 属性
console.log(o) // 发现新拷贝的对象 name 属性变了
console.log(obj) // 原有的对象 name 属性不变

本文介绍了一种在JavaScript中实现对象深拷贝的方法。通过递归遍历原对象的属性,判断属性值的数据类型,分别对数组、对象和其他数据类型进行处理,确保新对象与原对象完全独立。
1万+

被折叠的 条评论
为什么被折叠?



