JavaScript深拷贝
浅拷贝深拷贝JSON实现深拷贝递归实现深拷贝
浅拷贝
对于引用数据类型,对象名存储在栈内存中,对象值则存储在堆内存中,同时栈内存会提供一个引用指向堆内存中的值。浅拷贝只会将对象的各个属性进行依次复制,并不会进行递归复制,而 JavaScript 存储对象都是存地址的,所以浅拷贝会导致两个对象引用指向同一块堆内存地址。如果需要两个指向不同堆内存且值相同的对象,则需要使用深拷贝。
深拷贝
定义如下对象:
var student
= {
id
: '01',
name
: '张三',
achievement
: {
Chinese
: 80,
Mathematics
: 90,
English
: 89
},
family
: ['Dad', 'mom', 'Grandpa', 'grandma']
}
JSON实现深拷贝
var result
= JSON.parse(JSON.stringify(student
))
递归实现深拷贝
function deepCopy(obj
) {
let newObj
= (obj
instanceof Array ? [] : {});
if (obj
&& typeof obj
=== 'object') {
for(key
in obj
){
if(typeof obj
[key
] === "object"){
newObj
[key
] = deepCopy(obj
[key
]);
}else{
newObj
[key
] = obj
[key
];
}
}
}
return newObj
;
}
var student2
= deepCopy(student
);
转载请注明原文地址:https://ipadbbs.8miu.com/read-17977.html