1. // 原数组
  2. let list=[1,2,3,4];
  3. //数组深拷贝
  4. let box = list.slice();//方案一
  5. let box = [].concat(list); //方案二
  6. let box = [...list];//方案三
  7. let box = Array.from(list);//方案四
  8. //对象深拷贝(问题:若属性未对象或引用,则只会拷贝对象的引用地址)
  9. let B = Object.assign({},A);
  10. //对象深拷贝,方案1
  11. //若对象中存在function或RegExp则不能使用该方法
  12. let B = JSON.parse(JSON.stringify(A));
  13. //对象深拷贝,方案2-使用递归
  14. var clone = function (obj) {
  15. if(obj === null) return null
  16. if(typeof obj !== 'object') return obj;
  17. if(obj.constructor===Date) return new Date(obj);
  18. if(obj.constructor === RegExp) return new RegExp(obj);
  19. var newObj = new obj.constructor (); //保持继承链
  20. for (var key in obj) {
  21. if (obj.hasOwnProperty(key)) { //不遍历其原型链上的属性
  22. var val = obj[key];
  23. newObj[key] = typeof val === 'object' ? arguments.callee(val) : val; // 使用arguments.callee解除与函数名的耦合
  24. }
  25. }
  26. return newObj;
  27. };

参考

JavaScript深拷贝和浅拷贝看这篇就够了 Shallow Vs Deep Copy In Javascript Understanding Deep and Shallow Copy in Javascript