function deepClone(source) {
if(!source) return;
let target = null;
switch (true){
case Array.isArray(source):
target = [];
source.forEach((item) => {
target.push(deepClone(item));
});
break;
case Object.getPrototypeOf(source) === Object.prototype:
target = {};
Object.keys(source).forEach((key) => {
target[key] = deepClone(source[key])
});
break;
default:
target = source;
}
return target
}
const copy = JSON.parse(JSON.stringify(source));
弊端:会抛弃对象的constructor
适用:能够被json直接表示的数据结构(对象中只包含number、string、boolean、array、扁平对象)
不适用:含有function、regexp的数据结构