JSON.stringify JSON.parse(JSON.stringify(obj)) 遍历实现 // 利用 WeakMap 解决循环引用 let map = new WeakMap() function deepClone(obj) { if (obj instanceof Object) { if (map.has(obj)) { return map.get(obj) } let newObj if (obj instanceof Array) { newObj = [] } else if (obj instanceof Function) { newObj = function() { return obj.apply(this, arguments) } } else if (obj instanceof RegExp) { // 拼接正则 newobj = new RegExp(obj.source, obj.flags) } else if (obj instanceof Date) { newobj = new Date(obj) } else { newObj = {} } // 克隆一份对象出来 let desc = Object.getOwnPropertyDescriptors(obj) let clone = Object.create(Object.getPrototypeOf(obj), desc) map.set(obj, clone) for (let key in obj) { if (obj.hasOwnProperty(key)) { newObj[key] = deepClone(obj[key]) } } return newObj } return obj } 递归实现 function deepClone(obj, newObj) { var newObj = newObj || {}; for (let key in obj) { if (typeof obj[key] == 'object') { newObj[key] = (obj[key].constructor === Array) ? [] : {} deepClone(obj[key], newObj[key]); } else { newObj[key] = obj[key] } } return newObj; }; 递归实现(豆包) function deepCopy(obj) { if (typeof obj!== 'object' || obj === null) { return obj; } let copy = Array.isArray(obj)? [] : {}; for (let key in obj) { if (obj.hasOwnProperty(key)) { copy[key] = deepCopy(obj[key]); } } return copy; } 扩展阅读 深拷贝浅拷贝的区别!如何实现一个深拷贝!