一、乞丐版
JSON.parse(JSON.stringify(obj)) 无法拷贝 undefined、function、RegExp 等类型。
let obj1 = {
a:1,
b:2,
c:3
}
let obj2 = JSON.parse(JSON.stringify(obj1));
二、单层对象可拷贝
无法深度拷贝引用类型
let obj1 = {
a: 1,
b: 2
}
let obj2 = Object.assign({}, obj1);
——————————————————以下为深拷贝————————————————-
三、深拷贝之递归拷贝
需要2-4层判断: 【引用对象】 - 【基本数据】 【数组~循环递归、简单引用类型~循环递归、null~直接赋值、RegExp~直接赋值】 - 【基本数据-直接赋值】
deepClone(target) {
let result;
if(typeof target === "object") {
if(Array.isArray(target)) {
result = [];
for(let i in target) {
result.push(deepClone(target[i]))
}
} else if (target === null) {
result = null;
} else if (target.constructor === RegExp) {
result = target;
} else {
result = {};
for(let i in target) {
result[i] = deepClone(target[i])
}
} else {
result = target
}
return result;
}