js實現拷貝,使用普通賦值對象,在操作其中一個對象值的時候,另一個也會更改,不符合需求
因此引入深度拷貝,以下為實現深度拷貝的幾種法:
Object.assign
// 合並多個對象 var target = { a: 1, b: 1 }; var source1 = { b: 2, c: 2 }; var source2 = { c: 3 }; Object.assign(target, source1, source2);
注意: 這個是偽深度拷貝,只能拷貝第一層
遞歸拷貝
function deepClone(source){ const targetObj = source.constructor === Array ? [] : {}; // 判斷復制的目標是數組還是對象 for(let keys in source){ // 遍歷目標 if(source.hasOwnProperty(keys)){ if(source[keys] && typeof source[keys] === 'object'){ // 如果值是對象,就遞歸一下 targetObj[keys] = source[keys].constructor === Array ? [] : {}; targetObj[keys] = deepClone(source[keys]); }else{ // 如果不是,就直接賦值 targetObj[keys] = source[keys]; } } } return targetObj; }
... 拼接對象
let obj = { name: 'admin' } let obj2 = { age: 14, ...obj } console.log(obj2) // { age: 14, name: 'admin' }