1. 使用JSON方法

  1. // 第一种使用JSON.parse(JSON.stringify(obj))
  2. let obj1 = {
  3. a: 0,
  4. b: {
  5. c: 0
  6. }
  7. };
  8. let obj2 = JSON.parse(JSON.stringify(obj1));
  9. obj1.a = 1;
  10. obj1.b.c = 1;
  11. console.log(obj1); // {a: 1, b: {c: 1}}
  12. console.log(obj2); // {a: 0, b: {c: 0}}

2. 第三方库 loadsh.js

  1. let _ = require('./loadsh.js')
  2. var obj1 = {
  3. a: 1,
  4. b: { f: { g: 1 } },
  5. c: [1, 2, 3]
  6. };
  7. var obj2 = _.cloneDeep(obj1);
  8. console.log(obj1.b.f === obj2.b.f);// false

3. 手写实现一个深拷贝

  1. function deepCopy(object) {
  2. if (!object || typeof object !== "object") return;
  3. let newObject = Array.isArray(object) ? [] : {};
  4. for (let key in object) {
  5. if (object.hasOwnProperty(key)) {
  6. newObject[key] =
  7. typeof object[key] === "object" ? deepCopy(object[key]) : object[key];
  8. }
  9. }
  10. return newObject;
  11. }