淺拷貝與深拷貝

淺拷貝

淺拷貝只拷貝一層,深層次的對象只拷貝引用

var obj = {
    name: 'zhangsan',
    age: 18,
    omg: {
        name: 'omg'
    }
}

var ob = {};
for (var i in obj) {
    ob[i] = obj[i]
}

console.log(ob);

拷貝對象ob

ob深層對象omg改變會改變原始對象obj中的omg

var obj = {
    name: 'zhangsan',
    age: 18,
    omg: {
        name: 'omg'
    }
}

var ob = {};
for (var i in obj) {
    ob[i] = obj[i]
}
ob.omg.name = 'ob';
ob.name = 'omg';
console.log(ob)
console.log(obj);
淺拷貝會改變深層對象

ES6 新增的淺拷貝方法 Object.assign

var obj = {
    name: 'zhangsan',
    age: 18,
    omg: {
        name: 'omg'
    }
}

var ob = {};
Object.assign(ob,obj);

console.log(ob)
對象淺拷貝方法assign

利用遞歸進行對象的深拷貝

var obj = {
    name: 'zhangsan',
    age: 18,
    omg: {
        name: 'omg'
    },
    yy: [1,2,3]
}

var ob = {};
function deepCopy(newO,oldO) {
    for (var k in oldO) {
        var item = oldO[k];
        if (item instanceof Array) {
            newO[k] = [];
            deepCopy(newO[k],item);
        } else if (item instanceof Object) {
            newO[k] = {};
            deepCopy(newO[k],item);
        } else {
            newO[k] = item;
        }
    }
}

deepCopy(ob,obj);
ob.omg.name = 'ccc';
ob.yy.push(1,2);
console.log(ob);
console.log(obj);
深拷貝
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容