前两种都是浅拷贝

一、乞丐版

JSON.parse(JSON.stringify(obj)) 无法拷贝 undefined、function、RegExp 等类型。

  1. let obj1 = {
  2. a:1,
  3. b:2,
  4. c:3
  5. }
  6. let obj2 = JSON.parse(JSON.stringify(obj1));

二、单层对象可拷贝

无法深度拷贝引用类型

  1. let obj1 = {
  2. a: 1,
  3. b: 2
  4. }
  5. let obj2 = Object.assign({}, obj1);

——————————————————以下为深拷贝————————————————-

三、深拷贝之递归拷贝

需要2-4层判断: 【引用对象】 - 【基本数据】 【数组~循环递归、简单引用类型~循环递归、null~直接赋值、RegExp~直接赋值】 - 【基本数据-直接赋值】

  1. deepClone(target) {
  2. let result;
  3. if(typeof target === "object") {
  4. if(Array.isArray(target)) {
  5. result = [];
  6. for(let i in target) {
  7. result.push(deepClone(target[i]))
  8. }
  9. } else if (target === null) {
  10. result = null;
  11. } else if (target.constructor === RegExp) {
  12. result = target;
  13. } else {
  14. result = {};
  15. for(let i in target) {
  16. result[i] = deepClone(target[i])
  17. }
  18. } else {
  19. result = target
  20. }
  21. return result;
  22. }