晒下我的比较浅显的深拷贝,没有考虑原型和循环引用,可以拷贝一些js原生类型,用于面试用。
function deepClone(obj){ if(Object.prototype.toString.call(obj)==="[object Function]"){ let str=obj.toString(); /^functions*w*s*(s*)s*{(.*)/.test(str); let str1=RegExp.$1.slice(0,-1); return new Function(str1); } if(!obj||typeof obj!=="object") return obj; if(Object.prototype.toString.call(obj)==="[object Date]") return new Date(obj); if(Object.prototype.toString.call(obj)==="[object RegExp]") return new RegExp(obj); let cloneObj=Array.isArray(obj)?[]:{}; for(let i in obj){ if(obj.hasOwnProperty(i)){ cloneObj[i] = typeof obj[i] === 'object' ? deepClone(obj[i]) : obj[i]; } } return cloneObj; }