深浅拷贝复杂数据类型(引用数据类型),简单数据类型(基本数据类型)没有深浅的说法
1、Object.assign()
如果对象的属性值为简单数据类型(string,number),为深拷贝;如果属性值为复杂数据类型就是浅拷贝的,因为只拷贝了复杂数据类型的引用地址。
2、JSON.stringify 和 JSON.parse
function deepClone(obj) {
let obj1 = JSON.stringify(obj);
let oClone = JSON.parse(obj1);
return oClone;
}
3、jQuery extend方法
let obj = {
a: {
b: {
c: {}
}
}
};
let obj1 = $.extend(true, {}, obj);
4、lodash.cloneDeep()
let lodash = require('lodash');
let obj1 = {
a: 1,
b: { f: { g: 1 } },
c: [1, 2, 3]
};
let obj2 = lodash.cloneDeep(obj1);
5、递归的实现深拷贝
function deepClone(obj) {
let target;
if (typeof source === 'object') {
target = Array.isArray(obj) ? [] : {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
if (typeof obj[key] !== 'object') {
target[key] = obj[key];
} else {
target[key] = deepClone(obj[key]);
}
}
}
} else {
target = obj;
}
return target;
}