浅拷贝和深拷贝只针对object和array这样的复杂对象,通常浅拷贝只复制一层对象的属性,深拷贝则递归复制了全部的层级;函数
//浅拷贝函数 浅拷贝只是对对象地址进行了复制,并无开辟新的栈,复制的结果就是两个对象指向同一个地址,即修改其中一个对象的属性
//则另外一个对象的属性也会变化
var obj = {a: 1, arr: [1, 2, 3]};
var copyObj = copy(obj);
function copy(src) {
var dst = {};
for (var prop in src) {
if (src.hasOwnProperty(prop)) {
dst[prop] = src[prop];
}
}
return dst;
}
document.write(obj.arr);
//深拷贝
var china = {
nation: '中国',
birthplaces: ['北京', '上海', '广州'],
skincolr: 'yellow',
friends: ['sk', 'ls']
};
//深拷贝函数 深拷贝是开辟新的栈,两个对象对应不一样的地址,修改一个对象的属性不会改变另外一个对象的属性
function deepCopy(o, c) {
var c = c || {};
for (var i in o) {
if(typeof o[i]==='object'){
if(o[i].constructor===Array){
c[i]=[];
}else {
c[i]={};
}
deepCopy(o[i],c[i])
}else {
c[i]=o[i];
}
}
return c
}
var result = {name:'result'};
result = deepCopy(china,result);
console.dir(result)