浅拷贝
这里不再讨论循环遍历的方式
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;}
还需要考虑 数组 等其他引用类型的拷贝
