2022-04-20——對(duì)象拷貝

什么是淺拷貝,深拷貝以及和他們之間的區(qū)別:

淺拷貝:是創(chuàng)建一個(gè)新對(duì)象,這個(gè)對(duì)象有著原始對(duì)象屬性值的一份精確拷貝。如果屬性是基本類型,拷貝的就是基本類型的值,如果屬性是引用類型,拷貝的就是內(nèi)存地址 。

深拷貝:是將一個(gè)對(duì)象從內(nèi)存中完整的拷貝一份出來,從堆內(nèi)存中開辟一個(gè)新的區(qū)域存放新對(duì)象。

區(qū)別:淺拷貝基本類型之前互不影響,引用類型其中一個(gè)對(duì)象改變了地址,就會(huì)影響另一個(gè)對(duì)象;深拷貝
改變新對(duì)象不會(huì)影響原對(duì)象,他們之前互不影響。

一、對(duì)象拷貝有什么意義:

在開發(fā)項(xiàng)目的過程中,我們?nèi)绾蔚玫絻蓚€(gè)相同的對(duì)象:
例如:stu_1 = {name: "xiaoming"};stu_2 = {name: "xiaoming"};
通過賦值僅僅是賦值了一個(gè)引用,而這兩個(gè)變量仍然指向同一個(gè)對(duì)象;
使用對(duì)象克隆技術(shù),才能得到真正的,兩個(gè)相同的對(duì)象

二、對(duì)象克隆的使用場(chǎng)景

1、將對(duì)象作為函數(shù)參數(shù)的時(shí)候,不希望操作原對(duì)象。
2、面試常見問題。

三、拷貝的算法

1、淺拷貝(被拷貝對(duì)象的屬性值全是原始類型)

let stu = {
    name: "xiaoming",
    age: 10
};

function copyObject(obj){  //傳進(jìn)來一個(gè)對(duì)象得到一個(gè)對(duì)象副本
    let newObj = {}
    
    // 拷貝的算法
    for(let i in obj){
        newObj[i] = obj[i]
    }
    
    // 返回新對(duì)象
    return newObj
}

let newStu = copyObject(stu)
stu.age = 20
                
console.log(stu)
console.log(newStu)

2、深拷貝

let stu = {
    name: "xiaoming",
    age: 10,
    bestFriend:{
        name:"xiaohong",
        age:10
    }
};


// 深拷貝
function copyObject(obj) {
    let newObj = {}

    // 拷貝的算法
    for (let i in obj) {
        if(obj[i] instanceof Object){
            newObj[i] = copyObject(obj[i])  //函數(shù)遞歸
        }else{
            newObj[i] = obj[i]
        }
    }

    // 返回新對(duì)象
    return newObj
}

let newStu = copyObject(stu)
stu.age = 20

console.log(stu)
console.log(newStu)

3、實(shí)現(xiàn)深拷貝的方法

1、遞歸
2、轉(zhuǎn)JSON(通過字符串轉(zhuǎn)義,將引用類型轉(zhuǎn)為原始類型,再復(fù)制原始類型的值)

let stu = {
    name: "xiaoming",
    age: 10,
    bestFriend: {
        name: "xiaohong",
        age: 10
    }
};

let stuStr = JSON.stringify(stu)
let newStu = JSON.parse(stuStr)

stu.age = 20

console.log(stu)
console.log(newStu)

2、

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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