使用JavaScript写一个复制String、Number、null、undefined、Symbol、Set、Map、Function、Object、Boolean、Date、RegEx、Array、error数据类型的深拷贝
function deepCopy(obj) { if (typeof obj !== 'object' || obj === null) { return obj; }
let copy;
if (obj instanceof String) { copy = new String(obj); } else if (obj instanceof Number) { copy = new Number(obj); } else if (obj instanceof Symbol) { copy = Symbol(obj.valueOf()); } else if (obj instanceof Set) { copy = new Set(); obj.forEach(item => { copy.add(deepCopy(item)); }); } else if (obj instanceof Map) { copy = new Map(); obj.forEach((value, key) => { copy.set(key, deepCopy(value)); }); } else if (obj instanceof Function) { copy = obj; } else if (obj instanceof Object) { copy = {}; Object.keys(obj).forEach(key => { copy[key] = deepCopy(obj[key]); }); } else if (obj instanceof Boolean) { copy = Boolean(obj.valueOf()); } else if (obj instanceof Date) { copy = new Date(obj.valueOf()); } else if (obj instanceof RegExp) { copy = new RegExp(obj); } else if (obj instanceof Array) { copy = []; obj.forEach(item => { copy.push(deepCopy(item)); }); } else if (obj instanceof Error) { copy = new Error(obj.message); copy.stack = obj.stack; }
return copy; }
原文地址: http://www.cveoy.top/t/topic/bU7W 著作权归作者所有。请勿转载和采集!