js對象深拷貝、淺拷貝


淺拷貝1
//淺拷貝1
let obj01 = {
    name: 'Lily',
    age: '20',
    time: ['13', '15'],
    person: {
        name: 'Henry',
        age: '21'
    }
};
let obj02 = obj01;
obj02.age = '25'; //會改變obj11的age
obj02.person.age = '25'; //會改變obj11的person.age
obj02.time[1] = '25'; //會改變obj11的time值
console.log(obj01);

淺拷貝2-只復制一層對象的屬性,如果對象中的屬性值是對象,淺拷貝並不會復制對象屬性中的屬性

//淺拷貝2-只復制一層對象的屬性,如果對象中的屬性值是對象,淺拷貝並不會復制對象屬性中的屬性
let obj11 = {
    name: 'Lily',
    age: '20',
    time: ['13', '15'],
    person: {
        name: 'Henry',
        age: '21'
    }
};
let obj12 = {
    age: '22'
};
let obj13 = Object.assign({}, obj11, obj12);
obj13.age = '25'; //不會改變obj11的age
obj13.person.age = '25'; //會改變obj11的person.age
obj13.time[1] = '25'; //會改變obj11的time值
淺拷貝3-三點(...)
//淺拷貝1
let obj01 = {
    name: 'Lily',
    age: '20',
    time: ['13', '15'],
    person: {
        name: 'Henry',
        age: '21'
    }
};
let obj02 = {...obj01};
obj02.age = '25'; //會改變obj11的age
obj02.person.age = '25'; //會改變obj11的person.age
obj02.time[1] = '25'; //會改變obj11的time值
console.log(obj01);
 
        
深拷貝方法1-JSON.parse(JSON.stringify(obj))
//深拷貝方法1-JSON.parse(JSON.stringify(obj))
let obj21 = {
    name: 'Lily',
    age: '20',
    person: {
        name: 'Henry',
        age: '21'
    }
};
let obj22 = JSON.parse(JSON.stringify(obj21));
obj22.person.age = '25'; //不會改變obj31的person.age
console.log(obj21);
深拷貝方法2-迭代遞歸法for...in
//深拷貝方法2-迭代遞歸法for...in
let obj31 = {
    name: 'Lily',
    age: '20',
    time: ['13', '15'],
    person: {
        name: 'Henry',
        age: '21'
    }
};
function deepObject(obj){ //深拷貝
    let cloneObj = {};
    for(let key in obj){
        let objChild = Object.prototype.toString.call(obj[key]);
        cloneObj[key] = (objChild === '[object Array]' || objChild === '[object Object]') ? deepObject(obj[key]) : obj[key];
    }
    return cloneObj;
}
let obj32 = deepObject(obj31);
obj32.time[0] = '25'; //不會改變obj31的time值
obj32.person.age = '25'; //不會改變obj31的person.age
console.log(obj31);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM