let obj={name:“111”};
obj没有真正的储存这个对象,而是储存了该对象的内存地址;
因此当我们重新赋值并修改属性的值,会影响obj中的属性值(也会随之改变):
例子:
let obj={name:"111"};
let obj1=obj;
obj1.name="22";
console.log(obj) //{name: '22'}
为解决上述问题,有两种方法:
例子:``
let user = {
name: "John",
age: 30
};
let clone = {}; // 新的空对象
// 将 user 中所有的属性拷贝到其中
for (let key in user) {
clone[key] = user[key];
}
// 现在 clone 是带有相同内容的完全独立的对象
clone.name = "Pete"; // 改变了其中的数据
alert( user.name ); // 原来的对象中的 name 属性依然是 John
//我们也可以使用 Object.assign 方法来达成同样的效果。
```javascript
let user = {
name: "John",
age: 30
};
let clone = Object.assign({}, user);
上诉都为基本的obj结构,也有obj={name:xxx,obj1:{aa:111}},这种结构就需要深拷贝才能解决上诉问题,如下:
var objects = [{ 'a': 1 }, { 'b': 2 }];
var deep = _.cloneDeep(objects);
console.log(deep[0] === objects[0]);
// => false```