第一种:遍历拷贝
let arr2 = {
name: "小五",
Body: {
leg: 2
}
}
function copyObj(obj) {
let afterCopyObj = {}
for (const i in obj) {
afterCopyObj[i] = obj[i]
}
return afterCopyObj
}
console.log("克隆后:" + copyObj(arr2));
第二种:Object.assign
关于Object.assign是浅拷贝还是深拷贝的问题:第一级属性深拷贝,从第二级属性开始就是浅拷贝
name: "小红",
qita: {
age: 18
}
}
let arrObjassign = Object.assign([], arr)
console.log(arr); //{ name: '小红', qita: { age: 18 } }
arrObjassign.name = "克隆后的小红"
console.log(arrObjassign); //[ name: '克隆后的小红', qita: { age: 18 } ]
arrObjassign.qita.age = "这是二级属性的Object.assign的拷贝"
console.log(arr); //{ name: '小红', qita: { age: '这是二级属性的Object.assign的拷贝' } }
console.log(arrObjassign); //[ name: '克隆后的小红', qita: { age: '这是二级属性的Object.assign的拷贝' } ]
第三种:ES6展开运算符 ...
展开运算符特性与Object.assign相同
name: "展开运算符",
other: {
age: 1
}
}zhunshu
let newarr1 = {...arr1 }
console.log(newarr1);
// 只改变一级对象
newarr1.name = "展开运算符克隆后"
console.log(arr1); //
console.log(newarr1);
// 改变二级对象
newarr1.other.age = 35
console.log(arr1); //
console.log(newarr1);
深拷贝:
JSON.parse(JSON.stringify())以及遍历,这里不再赘述