淺拷貝和深拷貝只針對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)