浅拷贝
这里不再讨论循环遍历的方式
1. … 操作符
let obj = {a: 1, b: 2};
let clone = {...obj};
2. Object.assign
let obj = {a: 1, b: 2};
let clone = Object.assign({}, obj);
深拷贝
1. JSON.stringify 和 JSON.parse
let obj = {a: 1, b: 2};
let clone = JSON.parse(JSON.stringify(obj));
这个方法最简洁也最常用,但是它也并不是完全通用的,也有需要注意的地方:
- 不支持值为函数
2. 递归实现
简单实现:
function clone(origin) {
let newObj = {};
for (let key in origin) {
if (typeof origin[key] === 'object') {
newObj[key] = clone(origin[key]);
} else {
newObj[key] = origin[key];
}
}
return newObj;
}
还需要考虑 数组 等其他引用类型的拷贝