1.使用JSON.parse()结合JSON.stringify()
var obj = {name:'贾晁',age:'38'};
// 将对象转化为字符串之后再转化为对象
var obj1 = JSON.parse(JSON.stringify(obj));
可以将对象中的对象进行深拷贝。
2.ES6中的扩展运算符
var obj = {name:'贾晁',age:38};
var obj1 = {...obj};
只能深拷贝第一层元素。
3.ES6中的Object.assign()方法
var obj = {name:'贾晁',age:38};
// Object.assign 第一个参数必须是一个空对象
var obj1 = Object.assign({},obj);
只能深拷贝第一层元素。
4.利用for in 循环遍历原对象
var obj = {name:'贾晁',age:38};
var obj1 = {};
for(let k in obj){
obj1[k] = obj[k]
}
只能深拷贝第一层元素。
5.使用循环+递归方式实现
var obj = {name:'贾晁',details:{sex:'male',age:38}};
const deepClone = (obj,newObj = {}) => {
for (let k in obj) {
if (typeof obj[k] === 'object') {
newObj[k] = (obj[k].constructor === Array) ? [] : {};
deepClone(obj[k],newObj[k])
} else {
newObj[k] = obj[k]
}
}
return newObj;
}
var obj1 = deepClone(obj); // 第二个参数在首次调用时可以不传,因为有参数默认值
此方法是对上面第4种方法的改进,确保可以深拷贝目标对象中的对象。