深拷贝
学一份深拷贝
优秀的深拷贝啊,哈哈哈
function deepClone(obj) {
const hash = new Map();
return clone(obj);
function clone(obj) {
if (hash.has(obj)) return hash.get(obj);
if (obj === null) return null;
let t = typeof obj;
let cobj;
switch (t) {
case "string":
case "number":
case "boolean":
case "undefined":
return obj;
case "function":
return eval(obj.toString());
}
if (Array.isArray(obj)) {
cobj = [];
obj.forEach(a => {
cobj.push(clone(a));
});
return cobj;
}
cobj = obj.constructor !== Object ? Object.create(obj.constructor.prototype) : {};
hash.set(obj, cobj);
if (Object.prototype.toString.call(obj) === "[object Object]") {
Object.getOwnPropertyNames(obj)
.concat(Object.getOwnPropertySymbols(obj))
.forEach(a => {
cobj[a] = clone(obj[a]);
});
}
return cobj;
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 981909093@qq.com
推荐文章
文章标题:深拷贝
文章字数:131
本文作者:泽鹿
发布时间:2019-08-06, 19:56:38
最后更新:2019-08-28, 19:57:41
原始链接:http://panyifei.github.io/2019/08/06/前端面试/代码/基础/深拷贝/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。