function deepclone(source){ if(source == null||typeof source !== 'object' || source instanceof Date || source instanceof RegExp){ return source; } // if(typeof source !== 'object'){ // return source; // } let obj=Array.isArray(source)?[]:{} for(key in source){ if(source.hasOwnProperty(key)){ obj[key]=deepclone(source[key]) } } return obj } let z = { a: 1, b: { f: { g: 1 } }, c: [1, 2, 3] } z2=deepclone(z) z2.b.f=3 console.log(z)