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