var obj = {
a:1,
b:2
}
var obj2 = {
a:1,
b:2,
c:{
d:4,
e:{
f:5
}
},
}
// var obj1 = obj;
// obj1.a = 2;
// console.log(obj);//这个时候obj也被修改了,需求不修改
console.log(Object.getOwnPropertyNames(obj))
var obj1 = {}
//以下是浅拷贝成功的例子
// for (let var1 of Object.keys(obj)) {
// console.log(var1)
// obj1[var1] = obj[var1]
// }
// for (let var1 of Object.getOwnPropertyNames(obj)) {
// // console.log(var1)
// obj1[var1] = obj[var1]
// }
// for (let var1 in obj) {
// console.log(var1)
// obj1[var1] = obj[var1]
// }
// obj1.a = '哈哈';
// console.log(obj1)
// console.log(obj)//修改obj1,原对象没有被修改,需求成立
//以下是使用浅拷贝,但是对象有好几层的例子,即修改深层次的原对象也被修改,失败
// for (let var1 of Object.keys(obj2)) {
// console.log(var1)
// obj1[var1] = obj2[var1]
// }
// obj1.c.d = '深层次';
// console.log(obj1)
// console.log(obj2)//修改obj1,原对象也被修改,需求失败,所以需要深拷贝
// 以下是深拷贝
//第一种
console.log(typeof null)
function deepClone(obj,cloneObj){
cloneObj = cloneObj || {}
for (let var1 in obj) {
console.log(var1)
if( typeof obj[var1] == 'object' && typeof obj[var1] != 'null' ){
// cloneObj[var1] = Array.isArray(obj[var1]) ? [] : {};
cloneObj[var1] = obj[var1] instanceof Array ? [] : {}
deepClone(obj[var1],cloneObj[var1])
}else{
cloneObj[var1] = obj[var1]
}
}
return cloneObj
}
var cloneObj = deepClone(obj2)
//第二种
// var cloneObj = JSON.parse(JSON.stringify(obj2))
//第三种
// var cloneObj = $.extend(true,{},obj2)
cloneObj.c.d = '深层次';
cloneObj.c.e.m = '深深深层次';
console.log(cloneObj)
console.log(obj2)//修改克隆(拷贝后)来的数组,原对象不会被修改,需求成功
深浅拷贝具体代码
于 2022-09-30 10:32:06 首次发布