JavaScript Object的复制

 1         var obj = {
 2             a: 1,
 3             b: 2,
 4             c: {
 5                 d: 3,
 6                 e: 4,
 7                 f: function () {
 8                     console.log("对象复制");
 9                 }
10             }
11         }    

1. for in遍历复制(浅复制)

1         var o = {};
2         for (var prop in obj) {
3             o[prop] = obj[prop];
4         }
5         obj.a = 10;
6         obj.c.d = 10;
7         console.log(o);

for in是一种浅复制 

  对象o  浅层的属性不会随着obj 浅层属性的改变而改变,但是深层会  

  obj.c.d = 10;   将obj.c.d 的值改为10   对象o 对应的值也会改变

2. 使用展开运算符 "..." 复制(浅复制)

1         var o={...obj};
2         obj.c.d=10;
3         console.log(o);

  这种复制方法 也是一种浅复制

3.Object.assign()方法复制(浅复制)

1         var o = Object.assign({}, obj);
2         obj.c.d = 10;
3         console.log(o);

4.JSON方法复制(可完成深复制)

  将对象转换为JSON字符串,将JSON字符串还原为对象赋值

1         var o=JSON.parse(JSON.stringify(obj));
2         obj.c.d=10;
3         console.log(o);

虽然可以完成深复制,但是不可枚举属性和方法都无法进行复制

原文地址:https://www.cnblogs.com/rookieKong/p/12868482.html