一、概念理解
在 JavaScript 的浅拷贝中,如果一个数据是简单类型,直接复制它的值,如果一个数据是复杂数据类型,复制的是它地址的引用,有时候需要我们去深拷贝一个东西。


二、JSON.stringify()
这是最简单的深拷贝,特点是简单,但它有一个限制,它只能拷贝符合 JSON 语法的数据类型,数组、对象等,Date 类型它就无法拷贝。
let obj1 = {a:'1',b:'2'}let obj2 = JSON.parse(JSON.stringify(obj1))
二、递归算法
要点是
- 递归
- 判断类型
- 检查循环引用
- 需要忽略原型
function deepClone(target){if (typeof target ==='object'){let cloneTarget = Array.isArray(target) ?[]:{}for (let key in target){cloneTarget[key] = deepClone(target[key])}return cloneTarget}else{return target}}const target = {field1: 1,field2: undefined,field3: {child: 'child'},field4: [2, 4, 8]};const cloneTarget = deepClone(target)console.dir(target)console.dir(cloneTarget)
三、参看博客
「@浪里淘沙的小法师」
