网上查看大多手写深拷贝都有或多或少的问题,自己实现一个深拷贝,代码如下:
function _deepCLone(target) {
let ret;
if (target) {
if (typeof target === "object") {
if (Array.isArray(target)) {
ret = [];
for (let index = 0; index < target.length; index++) {
const element = target[index];
ret[index] = _deepCLone(element);
}
} else if (Object.prototype.toString.call(target).includes("Object")) {
ret = {};
for (const key in target) {
if (Object.hasOwnProperty.call(target, key)) {
const element = target[key];
ret[key] = _deepCLone(element);
}
}
} else {
ret = target;
}
} else {
ret = target;
}
} else {
ret = target;
}
return ret;
}
示例:
var a = { b : {c:1,d:/$/,m:new Date()},f : function(){return 9},x:null}
var b = _deepCLone(a)
console.log(b);
// { b: {c: 1, d: /$/, m: Mon Mar 15 2021 15:49:31 GMT+0800 (中国标准时间)},
// f: ƒ (),
// x: null }