淺拷貝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);