// 1.有缺点的深拷贝:obj内的方法无法拷贝,原本的构造函数会丢失const newobj = JSON.parse(JSON.stringify(oldobj))// 2.浅拷贝:第一层完全拷贝,下面层数的对象都是拷贝了一个指针const newobj = Object.assign({}, oldobj)// 3.递归深度克隆:完全深拷贝const deepClone = oldobj => { if(oldobj === null) return null // 基本值和函数 直接返回 if(typeof oldobj !== 'object') return oldobj // 正则和日期无法遍历,且属于对象,所以直接处理返回 if(oldobj instanceof RegExp) { return new RegExp(oldobj); } if(oldobj instanceof Date) { return new Date(oldobj) } // 继承自同一个构造函数 let newObj = new oldobj.constructor for(let key in oldobj) { // for in 可以遍历对象所有可迭代属性 if(oldobj.hasOwnProperty(key)) { // hasOwnProperty方法用来判断对象自身属性中是否拥有某属性 newObj[key] = deepClone(oldobj[key]); } } return newObj}