前端拷贝
-
类型
- 浅拷贝: 只拷贝一层的拷贝方式,地址拷贝
- 深拷贝: 值的完全拷贝
-
浅拷贝实现
- 解构赋值
- Object.assign
- 引用类型直接赋值
-
深拷贝实现
- JSON.parse / JSON.string [ 序列化 / 反序列化 ]
- 递归实现深拷贝 - 要求: 手写出来
//对象深拷贝 function deepClone(origin,target){ //target是否存在如果不存在创建空对象 let tar = target || {}, //判断是否为引用数据类型 toStr = Object.prototype.toString, arrType='[object Array]'; for(let key in origin){ //剥离原型链的数据 if(origin.hasOwnProperty(key)){ //判断是否为引用数据类型 对象或数组 if(typeof(origin[key]) === 'object' && origin[key] !== null){ if(toStr.call(origin[key]) === arrType ){ tar[key] = []; }else{ tar[key] = {}; } deepClone(origin[key],tar[key]); }else{ tar[key] = origin[key]; } } } return tar; }
- 第三方
- loadsh
- _.cloneDeep()
- Immutable.js 【 性能最好的 】
- loadsh