浅拷贝

1.

  1. let obj2={...boj};

2.

  1. let obj2={};
  2. for(let key in obj){
  3. if(!obj.hasOwnProperty(key)) break;
  4. obj2[key]=obj[key];
  5. }

深拷贝

1.

  1. let obj2=JSON.parse(JSON.stringify(obj))

弊端:symbol 函数 undefined 都会被忽略掉

2.

  1. function deepClone(obj){
  2. //=>过滤特殊情况
  3. if(obj===null) return null;
  4. if(typeof obj!=="object") return obj;
  5. if(obj instanceof RegExp(obj)){
  6. return new RegExp(obj);
  7. }
  8. //=>不直接创建空对象的目的:克隆的结果和之前保持相同的所属类
  9. let newObj=new obj.constructor;
  10. for(let key in obj){
  11. if(obj.hasOwnProperty(key)){
  12. newObj[key]=deepClone(obj[key])
  13. }
  14. }
  15. return newObj
  16. }