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);
虽然可以完成深复制,但是不可枚举属性和方法都无法进行复制