在实际的开发过程中,在实现一些业务逻辑时很容易碰到深拷贝,大多数(包括我)都会去使用JSON.parse(JSON.stringify())
这个方法去实现,但殊不知这种方法存在诸多弊端(例如会将时间对象转化成字符串,而且会丢失undefined以及函数,具体请自行百度),下边用递归来实现深拷贝一个对象,上代码:
function recursion(obj) {
if (Object.prototype.toString.call(obj) !== "[object Object]") return false;//类型判断
var res = {};
for (var key in obj) {
if (Object.prototype.toString.call(obj[key]) === "[object Object]") {
res[key] = recursion(obj[key]);
} else if (Object.prototype.toString.call(obj[key]) === "[object Array]") {
for (var item of obj[key]) {
if (!res[key]) {
res[key] = [];
}
res[key].push(item);
}
} else {
res[key] = obj[key];
}
}
return res;
}```