对象复制分为深拷贝和浅拷贝。
浅拷贝只会将对象中的各个属性依次复制,而不会递归复制,因为js存储对象是存地址的,所以会造成复制对象和原对象指向同一内存地址。
浅拷贝的代码简单实现:
var obj = { a:1, arr: [2,3] };
var shadowObj = shadowCopy(obj);
function shadowCopy(src) {
var dst = {};
for (var prop in src) {
if (src.hasOwnProperty(prop)) {
dst[prop] = src[prop];
}
}
return dst;}
深拷贝是指对对象的递归复制,包括对象中的对象,看到一个深拷贝的代码实现
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(var i in obj){
newobj[i] = typeof obj[i] === 'object' ?
cloneObj(obj[i]) : obj[i];
}
}
return newobj;
};
放一个知乎的链接,讲的不错https://www.zhihu.com/question/23031215