ES6 深拷贝_Javascript 经典面试之深拷贝VS浅拷贝
时间: 2023-07-08 22:23:27 浏览: 144
深拷贝和浅拷贝是在 JavaScript 中常用的两种数据复制方式。
浅拷贝只会复制对象的引用,而不是对象本身,因此当原对象改变时,新对象也会发生改变。深拷贝则会复制整个对象,包括对象的所有属性和嵌套对象,因此新对象和原对象是完全独立的,互不影响。
在 ES6 中,可以使用 Object.assign() 方法来进行浅拷贝。例如:
```
let obj1 = { name: 'Alice', age: 18 };
let obj2 = Object.assign({}, obj1);
obj1.age = 20;
console.log(obj2.age); // 输出 18
```
在这个例子中,我们使用 Object.assign() 对 obj1 进行浅拷贝,将其复制到 obj2 中。当我们修改 obj1 中的 age 属性时,obj2 并不会受到影响。
而对于深拷贝,可以使用 JSON.parse(JSON.stringify()) 来实现。例如:
```
let obj1 = { name: 'Alice', age: 18, address: { city: 'Shanghai', country: 'China' } };
let obj2 = JSON.parse(JSON.stringify(obj1));
obj1.address.city = 'Beijing';
console.log(obj2.address.city); // 输出 Shanghai
```
在这个例子中,我们使用 JSON.stringify() 将 obj1 转换为字符串,再使用 JSON.parse() 将其转换回对象。这样就可以实现深拷贝了。需要注意的是,使用 JSON.stringify() 和 JSON.parse() 进行深拷贝时,会自动忽略掉值为 undefined、function 和 symbol 的属性。
阅读全文